Compare commits
	
		
			301 Commits
		
	
	
		
			OpenSSL_0_
			...
			OpenSSL-fi
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					d1321464f6 | ||
| 
						 | 
					a0055fbef4 | ||
| 
						 | 
					2f9048b8a1 | ||
| 
						 | 
					d73ed541db | ||
| 
						 | 
					e6e5592a50 | ||
| 
						 | 
					663bbb6367 | ||
| 
						 | 
					98ced05c56 | ||
| 
						 | 
					5b75e1cff4 | ||
| 
						 | 
					f36a8c2060 | ||
| 
						 | 
					90ac9ec264 | ||
| 
						 | 
					fe5c4c885b | ||
| 
						 | 
					1950e8acea | ||
| 
						 | 
					437bafa5cc | ||
| 
						 | 
					7c78f06301 | ||
| 
						 | 
					b27278d0cf | ||
| 
						 | 
					24a69a8196 | ||
| 
						 | 
					b3049d696b | ||
| 
						 | 
					77b265f48c | ||
| 
						 | 
					735b9eeed5 | ||
| 
						 | 
					67c31c4b61 | ||
| 
						 | 
					0406ce2646 | ||
| 
						 | 
					76108ba7eb | ||
| 
						 | 
					4d27e3d339 | ||
| 
						 | 
					7d59e441ca | ||
| 
						 | 
					3e3c47d5d5 | ||
| 
						 | 
					03b7b4690c | ||
| 
						 | 
					0fd9322af1 | ||
| 
						 | 
					7016b1952e | ||
| 
						 | 
					ff3e014820 | ||
| 
						 | 
					50cd0f0eb3 | ||
| 
						 | 
					32098b7565 | ||
| 
						 | 
					bf4131fbf9 | ||
| 
						 | 
					2ac869590f | ||
| 
						 | 
					4742bc0f6f | ||
| 
						 | 
					02e483d236 | ||
| 
						 | 
					1a58139aaa | ||
| 
						 | 
					a32f4770e9 | ||
| 
						 | 
					086d475ffb | ||
| 
						 | 
					7f1288da93 | ||
| 
						 | 
					0a6e92a88f | ||
| 
						 | 
					36eaa70621 | ||
| 
						 | 
					d7dc9a7ce3 | ||
| 
						 | 
					319e19db9c | ||
| 
						 | 
					ef85b85b12 | ||
| 
						 | 
					4d4d27a2a0 | ||
| 
						 | 
					8f0d89092e | ||
| 
						 | 
					c4a2cab0bb | ||
| 
						 | 
					6d73d35f4f | ||
| 
						 | 
					f53e66af67 | ||
| 
						 | 
					5cbe626d26 | ||
| 
						 | 
					fe93a60b00 | ||
| 
						 | 
					5e10ca5618 | ||
| 
						 | 
					4e8da09800 | ||
| 
						 | 
					203ae57fe0 | ||
| 
						 | 
					529c33f1e8 | ||
| 
						 | 
					af18a34478 | ||
| 
						 | 
					da5c0127ac | ||
| 
						 | 
					ce0e12d29a | ||
| 
						 | 
					87339c6290 | ||
| 
						 | 
					0a22e7446b | ||
| 
						 | 
					b56cb7c6ea | ||
| 
						 | 
					cd5ab329f2 | ||
| 
						 | 
					80106dc5fb | ||
| 
						 | 
					0fa79cbe17 | ||
| 
						 | 
					be22102d82 | ||
| 
						 | 
					1ad95f8217 | ||
| 
						 | 
					5f1211834f | ||
| 
						 | 
					28feb1f8da | ||
| 
						 | 
					9596d1e63b | ||
| 
						 | 
					626bebeede | ||
| 
						 | 
					dfe42a131f | ||
| 
						 | 
					1970bc2703 | ||
| 
						 | 
					08debe11f8 | ||
| 
						 | 
					9c7e058216 | ||
| 
						 | 
					b01e8b2063 | ||
| 
						 | 
					100868d1cf | ||
| 
						 | 
					0712210f03 | ||
| 
						 | 
					8431a6aaf5 | ||
| 
						 | 
					2b4a783f66 | ||
| 
						 | 
					25df4a81cc | ||
| 
						 | 
					23830280e4 | ||
| 
						 | 
					bfdfc67b01 | ||
| 
						 | 
					4764a0543d | ||
| 
						 | 
					d92b0efbb8 | ||
| 
						 | 
					b329cc2410 | ||
| 
						 | 
					ed31fe68ff | ||
| 
						 | 
					8fa41c6696 | ||
| 
						 | 
					707a028c8b | ||
| 
						 | 
					9593bc46bf | ||
| 
						 | 
					5c65d38219 | ||
| 
						 | 
					1b8b2d9300 | ||
| 
						 | 
					4e1778b0d8 | ||
| 
						 | 
					982c67fbaa | ||
| 
						 | 
					2ef2463643 | ||
| 
						 | 
					585eb117d4 | ||
| 
						 | 
					7c27ac1030 | ||
| 
						 | 
					475631c31a | ||
| 
						 | 
					218ba8cb9d | ||
| 
						 | 
					e881c00515 | ||
| 
						 | 
					6c3fca2b10 | ||
| 
						 | 
					0225c7a41e | ||
| 
						 | 
					a334b0436d | ||
| 
						 | 
					af13a3949d | ||
| 
						 | 
					ffc35e73b4 | ||
| 
						 | 
					a197212e0f | ||
| 
						 | 
					8944220221 | ||
| 
						 | 
					5fd76ba57a | ||
| 
						 | 
					df50ec372e | ||
| 
						 | 
					49fa74385d | ||
| 
						 | 
					899f528c1a | ||
| 
						 | 
					5faa5a9476 | ||
| 
						 | 
					ddb0cb5bfd | ||
| 
						 | 
					b2d65cbac7 | ||
| 
						 | 
					6be8288928 | ||
| 
						 | 
					9fe07b7cf0 | ||
| 
						 | 
					0c86c87c60 | ||
| 
						 | 
					e20d6ef3d6 | ||
| 
						 | 
					27f50994ff | ||
| 
						 | 
					53c381105a | ||
| 
						 | 
					33d0ef8fde | ||
| 
						 | 
					b2acf7a572 | ||
| 
						 | 
					e8d2d9478d | ||
| 
						 | 
					23b3b61921 | ||
| 
						 | 
					d265676989 | ||
| 
						 | 
					69fc3dff96 | ||
| 
						 | 
					667731b635 | ||
| 
						 | 
					a416ca47ac | ||
| 
						 | 
					2714e2ac89 | ||
| 
						 | 
					1139eeecbc | ||
| 
						 | 
					1b936a5e37 | ||
| 
						 | 
					0cca0fe0c2 | ||
| 
						 | 
					56474376dc | ||
| 
						 | 
					3e511f167e | ||
| 
						 | 
					282af42404 | ||
| 
						 | 
					a81f337331 | ||
| 
						 | 
					1729dca9a8 | ||
| 
						 | 
					9719193222 | ||
| 
						 | 
					e6fa7c1276 | ||
| 
						 | 
					cf7053430d | ||
| 
						 | 
					ff03c6bc97 | ||
| 
						 | 
					82c8b6b74d | ||
| 
						 | 
					cb6fdc3a49 | ||
| 
						 | 
					8c3b5d5f27 | ||
| 
						 | 
					dc83f2e312 | ||
| 
						 | 
					6693e26927 | ||
| 
						 | 
					793364457b | ||
| 
						 | 
					6b05350495 | ||
| 
						 | 
					daec9a56a0 | ||
| 
						 | 
					5c77786a55 | ||
| 
						 | 
					42bc3582a9 | ||
| 
						 | 
					2050f6514f | ||
| 
						 | 
					5068d7dda4 | ||
| 
						 | 
					55768cf773 | ||
| 
						 | 
					6c69dcd9f5 | ||
| 
						 | 
					ad4297dd9c | ||
| 
						 | 
					aeb9ccfaad | ||
| 
						 | 
					79b335a4b5 | ||
| 
						 | 
					dcc309548e | ||
| 
						 | 
					8eae0ff0f7 | ||
| 
						 | 
					5c4a07551e | ||
| 
						 | 
					b443a0ea5d | ||
| 
						 | 
					1f4a5a3339 | ||
| 
						 | 
					20fb51b1a7 | ||
| 
						 | 
					551bfa60e0 | ||
| 
						 | 
					ab50cf18db | ||
| 
						 | 
					31c0a38482 | ||
| 
						 | 
					91c88deafe | ||
| 
						 | 
					a91cb15daa | ||
| 
						 | 
					d2890f6223 | ||
| 
						 | 
					1ce5bb27e4 | ||
| 
						 | 
					04262cee42 | ||
| 
						 | 
					a5a1e71e86 | ||
| 
						 | 
					06d2a382c4 | ||
| 
						 | 
					4630a51537 | ||
| 
						 | 
					01f2ee2bc6 | ||
| 
						 | 
					def5aefa7f | ||
| 
						 | 
					5ba7d69c66 | ||
| 
						 | 
					cf81dc74bd | ||
| 
						 | 
					46c646225d | ||
| 
						 | 
					d18c4d09d1 | ||
| 
						 | 
					e5ad779b69 | ||
| 
						 | 
					cb36743161 | ||
| 
						 | 
					fb3eab3562 | ||
| 
						 | 
					2724bcac2f | ||
| 
						 | 
					3431c07a66 | ||
| 
						 | 
					9abf011643 | ||
| 
						 | 
					75cdb055e6 | ||
| 
						 | 
					f4207058b8 | ||
| 
						 | 
					900b1eb869 | ||
| 
						 | 
					e3b61b1e57 | ||
| 
						 | 
					750779da07 | ||
| 
						 | 
					157f01a8ef | ||
| 
						 | 
					491923fde1 | ||
| 
						 | 
					273f5726a5 | ||
| 
						 | 
					a37778046d | ||
| 
						 | 
					8a087e57d2 | ||
| 
						 | 
					e384fd9418 | ||
| 
						 | 
					f6e32f9db4 | ||
| 
						 | 
					66bb600b05 | ||
| 
						 | 
					c3b2d69945 | ||
| 
						 | 
					619991cc3e | ||
| 
						 | 
					3c410172b7 | ||
| 
						 | 
					56319ad00e | ||
| 
						 | 
					f7832889d3 | ||
| 
						 | 
					46fdad292a | ||
| 
						 | 
					da99684a8e | ||
| 
						 | 
					2130ee35d9 | ||
| 
						 | 
					15f239a4a3 | ||
| 
						 | 
					223ab84726 | ||
| 
						 | 
					94d66c3182 | ||
| 
						 | 
					a0dd62bdb7 | ||
| 
						 | 
					fd6d2e0754 | ||
| 
						 | 
					4a4d3c02f2 | ||
| 
						 | 
					7abd533793 | ||
| 
						 | 
					b1816f93e1 | ||
| 
						 | 
					e1904f9eec | ||
| 
						 | 
					9f3d5018c4 | ||
| 
						 | 
					768729afbe | ||
| 
						 | 
					0c96e35c42 | ||
| 
						 | 
					72e2934909 | ||
| 
						 | 
					26d96f26da | ||
| 
						 | 
					5fcc83ed1e | ||
| 
						 | 
					9ecb20f1de | ||
| 
						 | 
					b611ff350c | ||
| 
						 | 
					7f790e0575 | ||
| 
						 | 
					dccf15ee25 | ||
| 
						 | 
					89d8a20f22 | ||
| 
						 | 
					782f8600fa | ||
| 
						 | 
					f2008fe3fd | ||
| 
						 | 
					70b3786ffe | ||
| 
						 | 
					b48fb91edd | ||
| 
						 | 
					8a19891b2a | ||
| 
						 | 
					f35d0948eb | ||
| 
						 | 
					d0f2c1bb81 | ||
| 
						 | 
					7ba410f9a5 | ||
| 
						 | 
					36c2be5645 | ||
| 
						 | 
					0869cd2676 | ||
| 
						 | 
					4ac5596a86 | ||
| 
						 | 
					3df76b15ed | ||
| 
						 | 
					9b3cce3d00 | ||
| 
						 | 
					c8a2f669f3 | ||
| 
						 | 
					04a2a836f7 | ||
| 
						 | 
					d39e69c95a | ||
| 
						 | 
					69ffdb2d46 | ||
| 
						 | 
					e301a26ade | ||
| 
						 | 
					2ed0cf8eef | ||
| 
						 | 
					1c2cbe6fcc | ||
| 
						 | 
					023616e32d | ||
| 
						 | 
					b2703470e0 | ||
| 
						 | 
					452cd79114 | ||
| 
						 | 
					9eaca0079f | ||
| 
						 | 
					bbaf3c2b40 | ||
| 
						 | 
					ce147f8998 | ||
| 
						 | 
					4e99f848d8 | ||
| 
						 | 
					358cf2f6e8 | ||
| 
						 | 
					407c2c1106 | ||
| 
						 | 
					2e8aaf94c2 | ||
| 
						 | 
					3108a80b09 | ||
| 
						 | 
					bfa3933c8b | ||
| 
						 | 
					40b4a633a1 | ||
| 
						 | 
					fc784cbc5c | ||
| 
						 | 
					d20b5c2043 | ||
| 
						 | 
					fdf45c44be | ||
| 
						 | 
					68b08c56c2 | ||
| 
						 | 
					4416eec8ca | ||
| 
						 | 
					709af3877d | ||
| 
						 | 
					8651ba5d45 | ||
| 
						 | 
					efbb2cb4e5 | ||
| 
						 | 
					dec45d606f | ||
| 
						 | 
					6dfd1801fe | ||
| 
						 | 
					d8242c65b3 | ||
| 
						 | 
					ee42430cc8 | ||
| 
						 | 
					da3fe316cf | ||
| 
						 | 
					c8214d6c8b | ||
| 
						 | 
					063b216760 | ||
| 
						 | 
					65f0a05325 | ||
| 
						 | 
					952b6955c0 | ||
| 
						 | 
					6f74afaa57 | ||
| 
						 | 
					3edefe670a | ||
| 
						 | 
					a461d307f2 | ||
| 
						 | 
					89a4dad179 | ||
| 
						 | 
					1ea2fda9dc | ||
| 
						 | 
					f41dcf3d50 | ||
| 
						 | 
					1e6031eeb7 | ||
| 
						 | 
					d9e61666c9 | ||
| 
						 | 
					2f07e0d591 | ||
| 
						 | 
					b0a3d8dd27 | ||
| 
						 | 
					a7100590fe | ||
| 
						 | 
					7b1ef38609 | ||
| 
						 | 
					3f5602ce04 | ||
| 
						 | 
					be0dccdd9e | ||
| 
						 | 
					50a4d84e79 | ||
| 
						 | 
					0135aa9888 | ||
| 
						 | 
					692e644df6 | ||
| 
						 | 
					3b72341958 | ||
| 
						 | 
					3a0278b211 | ||
| 
						 | 
					304ba9fa78 | ||
| 
						 | 
					4484703f5e | ||
| 
						 | 
					6b7751ac2c | ||
| 
						 | 
					7af4688a8f | ||
| 
						 | 
					d8360c3a8a | 
							
								
								
									
										363
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										363
									
								
								CHANGES
									
									
									
									
									
								
							@@ -2,7 +2,368 @@
 | 
			
		||||
 OpenSSL CHANGES
 | 
			
		||||
 _______________
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8e and 0.9.8f  [xx XXX xxxx]
 | 
			
		||||
 Changes between 0.9.8e and 0.9.8f-fips  [xx XXX xxxx]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  *) Add option --with-fipslibdir to specify location of fipscanister.lib
 | 
			
		||||
     and friends. When combined with fips build option fipscanister.lib is
 | 
			
		||||
     not built but linked from the supplied directory. Always link fips
 | 
			
		||||
     utilities against fiscanister.lib only except in fipsdso builds.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Add SSE2 instruction support to WIN32 build. These will be compiled
 | 
			
		||||
     by default and used if an appopriate CPU is detected. Some older versions
 | 
			
		||||
     of NASM or MASM which don't support SSE2 will need to be updated. 
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Tolerate DigestInfo structure with absent parameters in FIPS mode
 | 
			
		||||
     (as required by several standards).
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Enhance mkfipsscr.pl to cope with different directory layouts. It now
 | 
			
		||||
     relies on the filename and makes no assumptions about the pathname.
 | 
			
		||||
     In the case of PSS it scans the file to determine the salt length.
 | 
			
		||||
     Paths can be filtered. Also reports duplicate and missing files.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Updates to WIN32 build system. Make use of AES assembly language routines.
 | 
			
		||||
     Use assembly language routines in FIPS compilation.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Use standard implementations of SHAx, DES, AES under crypto/ in FIPS
 | 
			
		||||
     mode to avoid having to maintain two versions. This will also make use
 | 
			
		||||
     of appropriate assembly language optimizations.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Check for selftest status in all crypto operations and exit with a
 | 
			
		||||
     fatal error if selftest failed.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) New flag in EVP_CIPHER: EVP_CIPH_FLAG_DEFAULT_ASN1. This will
 | 
			
		||||
     automatically use EVP_CIPHER_{get,set}_asn1_iv and avoid the
 | 
			
		||||
     need for any ASN1 dependencies in FIPS library. Move AES and 3DES
 | 
			
		||||
     cipher definitions to fips library and modify AES and 3DES algorithm
 | 
			
		||||
     tests and self tests to use EVP.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Move EVP cipher code into enc_min.c to support a minimal implementation
 | 
			
		||||
     for use by FIPS applications.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Add algorithm config module. Currently just handles setting FIPS mode.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Rewrite self tests and pairwise tests to use EVP. Add more extensive
 | 
			
		||||
     self tests for RSA in all digests and modes.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) New flags RSA_FIPS_METHOD and DSA_FIPS_METHOD to indicate a method is
 | 
			
		||||
     allowed in FIPS mode. Disable direct low level RSA and DSA signature
 | 
			
		||||
     operations in FIPS mode so all operations have to be made via EVP.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) New flag EVP_MD_FLAG_SVCTX which passes EVP_MD_CTX and key to underlying
 | 
			
		||||
     sign/verify method. This permits the method to perform finalization
 | 
			
		||||
     and signing itself and have access to the EVP_MD_CTX structure in case
 | 
			
		||||
     additional parameters are needed. Modify fips_{dsa,rsa}_{sign,verify}
 | 
			
		||||
     to use EVP_MD_FLAG_SVCTX and support PSS and X9.31 RSA modes.
 | 
			
		||||
     Modify RSA algorithm test programs to use new parameters.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Add small standalone ASN1 encoder/decoder to handle DSA signature format.
 | 
			
		||||
     Modify test, algorithm test and selftest routines to use EVP for DSA.
 | 
			
		||||
     Move FIPS implementation of EVP_sha*() and EVP_dss1() under fips-1.0.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Modify VC++ build system to rename .text and .rdata segments in
 | 
			
		||||
     FIPS sources to .fipst${a,b,c}, and $fipsr${a,b,c} and place them
 | 
			
		||||
     in a static library fipscanister.lib using a perl script. These are
 | 
			
		||||
     then combined by the VC++ linker into a single segment in suffix
 | 
			
		||||
     order but without the suffix (i.e. .fipstx, .fipsrd and .fipsda).
 | 
			
		||||
     This serves the same purpose as fipscanister.o on other platforms
 | 
			
		||||
     but has the advantage that it can be created using only standard VC++
 | 
			
		||||
     utilities.
 | 
			
		||||
     [Steve Henson and Andy Polyakov]
 | 
			
		||||
 | 
			
		||||
  *) Modify WIN32 build system to forward references functions implemented
 | 
			
		||||
     in FIPS DLL. 
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Move error library so that all lhash dependencies are in a separate
 | 
			
		||||
     file. Include a simplified ERR_get_state() function for stand alone
 | 
			
		||||
     FIPS applications. Include a initialization function OPENSSL_init()
 | 
			
		||||
     to set all callbacks, automatically call OPENSSL_init() once when
 | 
			
		||||
     a cipher or digest is added. This should mean that almost all applications
 | 
			
		||||
     set the callbacks automatically. Exceptional cases can call OPENSSL_init()
 | 
			
		||||
     manually like this:
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_HAVE_INIT
 | 
			
		||||
    OPENSSL_init();
 | 
			
		||||
#endif
 | 
			
		||||
     before starting any threads.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Collect common functions into header file "fips_utl.h".
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Only enable dynamic lock functionality in CRYPTO_lock() when it is really
 | 
			
		||||
     needed. Move some lock functionality into new file dyn_lck.c .
 | 
			
		||||
     This further reduces FIPS dependencies allowing the complete removal
 | 
			
		||||
     of STACK and OBJ_bsearch().
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Reduce FIPS test program dependencies by providing stand alone
 | 
			
		||||
     versions of some existing functions in libcrypto. Avoid use
 | 
			
		||||
     of BIOs by converting to system stdio. Move some functions in FIPS
 | 
			
		||||
     files: e.g. all use of BIO_printf().
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Modify build of libcrypto in FIPS mode by using a perl 
 | 
			
		||||
     script "arx.pl" which calls the archiver specifically
 | 
			
		||||
     excluding any FIPS dependencies in libcrypto.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Port OpenSSL 0.9.7 FIPS code to 0.9.8. Convert to new
 | 
			
		||||
     Makefile form. Update Configure. Convert and update
 | 
			
		||||
     FIPS source files. Update libcrypto, libssl and apps
 | 
			
		||||
     with additional functionality from 0.9.7 FIPS code.
 | 
			
		||||
     Update Windows build system.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.8e and 0.9.8f  [23 Feb 2007]
 | 
			
		||||
 | 
			
		||||
  *) Mitigate branch prediction attacks, which can be practical if a
 | 
			
		||||
     single processor is shared, allowing a spy process to extract
 | 
			
		||||
     information.  For detailed background information, see
 | 
			
		||||
     http://eprint.iacr.org/2007/039 (O. Aciicmez, S. Gueron,
 | 
			
		||||
     J.-P. Seifert, "New Branch Prediction Vulnerabilities in OpenSSL
 | 
			
		||||
     and Necessary Software Countermeasures").  The core of the change
 | 
			
		||||
     are new versions BN_div_no_branch() and
 | 
			
		||||
     BN_mod_inverse_no_branch() of BN_div() and BN_mod_inverse(),
 | 
			
		||||
     respectively, which are slower, but avoid the security-relevant
 | 
			
		||||
     conditional branches.  These are automatically called by BN_div()
 | 
			
		||||
     and BN_mod_inverse() if the flag BN_FLG_CONSTTIME is set for the
 | 
			
		||||
     modulus.  Also, BN_is_bit_set() has been changed to remove a
 | 
			
		||||
     conditional branch.
 | 
			
		||||
 | 
			
		||||
     BN_FLG_CONSTTIME is the new name for the previous
 | 
			
		||||
     BN_FLG_EXP_CONSTTIME flag, since it now affects more than just
 | 
			
		||||
     modular exponentiation.  (Since OpenSSL 0.9.7h, setting this flag
 | 
			
		||||
     in the exponent causes BN_mod_exp_mont() to use the alternative
 | 
			
		||||
     implementation in BN_mod_exp_mont_consttime().)  The old name
 | 
			
		||||
     remains as a deprecated alias.
 | 
			
		||||
 | 
			
		||||
     Similary, RSA_FLAG_NO_EXP_CONSTTIME is replaced by a more general
 | 
			
		||||
     RSA_FLAG_NO_CONSTTIME flag since the RSA implementation now uses
 | 
			
		||||
     constant-time implementations for more than just exponentiation.
 | 
			
		||||
     Here too the old name is kept as a deprecated alias.
 | 
			
		||||
 | 
			
		||||
     BN_BLINDING_new() will now use BN_dup() for the modulus so that
 | 
			
		||||
     the BN_BLINDING structure gets an independent copy of the
 | 
			
		||||
     modulus.  This means that the previous "BIGNUM *m" argument to
 | 
			
		||||
     BN_BLINDING_new() and to BN_BLINDING_create_param() now
 | 
			
		||||
     essentially becomes "const BIGNUM *m", although we can't actually
 | 
			
		||||
     change this in the header file before 0.9.9.  It allows
 | 
			
		||||
     RSA_setup_blinding() to use BN_with_flags() on the modulus to
 | 
			
		||||
     enable BN_FLG_CONSTTIME.
 | 
			
		||||
 | 
			
		||||
     [Matthew D Wood (Intel Corp)]
 | 
			
		||||
 | 
			
		||||
  *) Mitigate branch prediction attacks, which can be practical if a
 | 
			
		||||
     single processor is shared, allowing a spy process to extract
 | 
			
		||||
     information.  For detailed background information, see
 | 
			
		||||
     http://eprint.iacr.org/2007/039 (O. Aciicmez, S. Gueron,
 | 
			
		||||
     J.-P. Seifert, "New Branch Prediction Vulnerabilities in OpenSSL
 | 
			
		||||
     and Necessary Software Countermeasures").  The core of the change
 | 
			
		||||
     are new versions BN_div_no_branch() and
 | 
			
		||||
     BN_mod_inverse_no_branch() of BN_div() and BN_mod_inverse(),
 | 
			
		||||
     respectively, which are slower, but avoid the security-relevant
 | 
			
		||||
     conditional branches.  These are automatically called by BN_div()
 | 
			
		||||
     and BN_mod_inverse() if the flag BN_FLG_CONSTTIME is set for one
 | 
			
		||||
     of the input BIGNUMs.  Also, BN_is_bit_set() has been changed to
 | 
			
		||||
     remove a conditional branch.
 | 
			
		||||
 | 
			
		||||
     BN_FLG_CONSTTIME is the new name for the previous
 | 
			
		||||
     BN_FLG_EXP_CONSTTIME flag, since it now affects more than just
 | 
			
		||||
     modular exponentiation.  (Since OpenSSL 0.9.7h, setting this flag
 | 
			
		||||
     in the exponent causes BN_mod_exp_mont() to use the alternative
 | 
			
		||||
     implementation in BN_mod_exp_mont_consttime().)  The old name
 | 
			
		||||
     remains as a deprecated alias.
 | 
			
		||||
 | 
			
		||||
     Similary, RSA_FLAG_NO_EXP_CONSTTIME is replaced by a more general
 | 
			
		||||
     RSA_FLAG_NO_CONSTTIME flag since the RSA implementation now uses
 | 
			
		||||
     constant-time implementations for more than just exponentiation.
 | 
			
		||||
     Here too the old name is kept as a deprecated alias.
 | 
			
		||||
 | 
			
		||||
     BN_BLINDING_new() will now use BN_dup() for the modulus so that
 | 
			
		||||
     the BN_BLINDING structure gets an independent copy of the
 | 
			
		||||
     modulus.  This means that the previous "BIGNUM *m" argument to
 | 
			
		||||
     BN_BLINDING_new() and to BN_BLINDING_create_param() now
 | 
			
		||||
     essentially becomes "const BIGNUM *m", although we can't actually
 | 
			
		||||
     change this in the header file before 0.9.9.  It allows
 | 
			
		||||
     RSA_setup_blinding() to use BN_with_flags() on the modulus to
 | 
			
		||||
     enable BN_FLG_CONSTTIME.
 | 
			
		||||
 | 
			
		||||
     [Matthew D Wood (Intel Corp)]
 | 
			
		||||
 | 
			
		||||
  *) Add the Korean symmetric 128-bit cipher SEED (see
 | 
			
		||||
     http://www.kisa.or.kr/kisa/seed/jsp/seed_eng.jsp) and
 | 
			
		||||
     add SEED ciphersuites from RFC 4162:
 | 
			
		||||
 | 
			
		||||
        TLS_RSA_WITH_SEED_CBC_SHA      =  "SEED-SHA"
 | 
			
		||||
        TLS_DHE_DSS_WITH_SEED_CBC_SHA  =  "DHE-DSS-SEED-SHA"
 | 
			
		||||
        TLS_DHE_RSA_WITH_SEED_CBC_SHA  =  "DHE-RSA-SEED-SHA"
 | 
			
		||||
        TLS_DH_anon_WITH_SEED_CBC_SHA  =  "ADH-SEED-SHA"
 | 
			
		||||
 | 
			
		||||
     To minimize changes between patchlevels in the OpenSSL 0.9.8
 | 
			
		||||
     series, SEED remains excluded from compilation unless OpenSSL
 | 
			
		||||
     is configured with 'enable-seed'.
 | 
			
		||||
     [KISA, Bodo Moeller]
 | 
			
		||||
 | 
			
		||||
  *) Mitigate branch prediction attacks, which can be practical if a
 | 
			
		||||
     single processor is shared, allowing a spy process to extract
 | 
			
		||||
     information.  For detailed background information, see
 | 
			
		||||
     http://eprint.iacr.org/2007/039 (O. Aciicmez, S. Gueron,
 | 
			
		||||
     J.-P. Seifert, "New Branch Prediction Vulnerabilities in OpenSSL
 | 
			
		||||
     and Necessary Software Countermeasures").  The core of the change
 | 
			
		||||
     are new versions BN_div_no_branch() and
 | 
			
		||||
     BN_mod_inverse_no_branch() of BN_div() and BN_mod_inverse(),
 | 
			
		||||
     respectively, which are slower, but avoid the security-relevant
 | 
			
		||||
     conditional branches.  These are automatically called by BN_div()
 | 
			
		||||
     and BN_mod_inverse() if the flag BN_FLG_CONSTTIME is set for one
 | 
			
		||||
     of the input BIGNUMs.  Also, BN_is_bit_set() has been changed to
 | 
			
		||||
     remove a conditional branch.
 | 
			
		||||
 | 
			
		||||
     BN_FLG_CONSTTIME is the new name for the previous
 | 
			
		||||
     BN_FLG_EXP_CONSTTIME flag, since it now affects more than just
 | 
			
		||||
     modular exponentiation.  (Since OpenSSL 0.9.7h, setting this flag
 | 
			
		||||
     in the exponent causes BN_mod_exp_mont() to use the alternative
 | 
			
		||||
     implementation in BN_mod_exp_mont_consttime().)  The old name
 | 
			
		||||
     remains as a deprecated alias.
 | 
			
		||||
 | 
			
		||||
     Similary, RSA_FLAG_NO_EXP_CONSTTIME is replaced by a more general
 | 
			
		||||
     RSA_FLAG_NO_CONSTTIME flag since the RSA implementation now uses
 | 
			
		||||
     constant-time implementations for more than just exponentiation.
 | 
			
		||||
     Here too the old name is kept as a deprecated alias.
 | 
			
		||||
 | 
			
		||||
     BN_BLINDING_new() will now use BN_dup() for the modulus so that
 | 
			
		||||
     the BN_BLINDING structure gets an independent copy of the
 | 
			
		||||
     modulus.  This means that the previous "BIGNUM *m" argument to
 | 
			
		||||
     BN_BLINDING_new() and to BN_BLINDING_create_param() now
 | 
			
		||||
     essentially becomes "const BIGNUM *m", although we can't actually
 | 
			
		||||
     change this in the header file before 0.9.9.  It allows
 | 
			
		||||
     RSA_setup_blinding() to use BN_with_flags() on the modulus to
 | 
			
		||||
     enable BN_FLG_CONSTTIME.
 | 
			
		||||
 | 
			
		||||
     [Matthew D Wood (Intel Corp)]
 | 
			
		||||
 | 
			
		||||
  *) Add the Korean symmetric 128-bit cipher SEED (see
 | 
			
		||||
     http://www.kisa.or.kr/kisa/seed/jsp/seed_eng.jsp) and
 | 
			
		||||
     add SEED ciphersuites from RFC 4162:
 | 
			
		||||
 | 
			
		||||
        TLS_RSA_WITH_SEED_CBC_SHA      =  "SEED-SHA"
 | 
			
		||||
        TLS_DHE_DSS_WITH_SEED_CBC_SHA  =  "DHE-DSS-SEED-SHA"
 | 
			
		||||
        TLS_DHE_RSA_WITH_SEED_CBC_SHA  =  "DHE-RSA-SEED-SHA"
 | 
			
		||||
        TLS_DH_anon_WITH_SEED_CBC_SHA  =  "ADH-SEED-SHA"
 | 
			
		||||
 | 
			
		||||
     To minimize changes between patchlevels in the OpenSSL 0.9.8
 | 
			
		||||
     series, SEED remains excluded from compilation unless OpenSSL
 | 
			
		||||
     is configured with 'enable-seed'.
 | 
			
		||||
     [KISA, Bodo Moeller]
 | 
			
		||||
 | 
			
		||||
  *) Mitigate branch prediction attacks, which can be practical if a
 | 
			
		||||
     single processor is shared, allowing a spy process to extract
 | 
			
		||||
     information.  For detailed background information, see
 | 
			
		||||
     http://eprint.iacr.org/2007/039 (O. Aciicmez, S. Gueron,
 | 
			
		||||
     J.-P. Seifert, "New Branch Prediction Vulnerabilities in OpenSSL
 | 
			
		||||
     and Necessary Software Countermeasures").  The core of the change
 | 
			
		||||
     are new versions BN_div_no_branch() and
 | 
			
		||||
     BN_mod_inverse_no_branch() of BN_div() and BN_mod_inverse(),
 | 
			
		||||
     respectively, which are slower, but avoid the security-relevant
 | 
			
		||||
     conditional branches.  These are automatically called by BN_div()
 | 
			
		||||
     and BN_mod_inverse() if the flag BN_FLG_CONSTTIME is set for one
 | 
			
		||||
     of the input BIGNUMs.  Also, BN_is_bit_set() has been changed to
 | 
			
		||||
     remove a conditional branch.
 | 
			
		||||
 | 
			
		||||
     BN_FLG_CONSTTIME is the new name for the previous
 | 
			
		||||
     BN_FLG_EXP_CONSTTIME flag, since it now affects more than just
 | 
			
		||||
     modular exponentiation.  (Since OpenSSL 0.9.7h, setting this flag
 | 
			
		||||
     in the exponent causes BN_mod_exp_mont() to use the alternative
 | 
			
		||||
     implementation in BN_mod_exp_mont_consttime().)  The old name
 | 
			
		||||
     remains as a deprecated alias.
 | 
			
		||||
 | 
			
		||||
     Similary, RSA_FLAG_NO_EXP_CONSTTIME is replaced by a more general
 | 
			
		||||
     RSA_FLAG_NO_CONSTTIME flag since the RSA implementation now uses
 | 
			
		||||
     constant-time implementations for more than just exponentiation.
 | 
			
		||||
     Here too the old name is kept as a deprecated alias.
 | 
			
		||||
 | 
			
		||||
     BN_BLINDING_new() will now use BN_dup() for the modulus so that
 | 
			
		||||
     the BN_BLINDING structure gets an independent copy of the
 | 
			
		||||
     modulus.  This means that the previous "BIGNUM *m" argument to
 | 
			
		||||
     BN_BLINDING_new() and to BN_BLINDING_create_param() now
 | 
			
		||||
     essentially becomes "const BIGNUM *m", although we can't actually
 | 
			
		||||
     change this in the header file before 0.9.9.  It allows
 | 
			
		||||
     RSA_setup_blinding() to use BN_with_flags() on the modulus to
 | 
			
		||||
     enable BN_FLG_CONSTTIME.
 | 
			
		||||
 | 
			
		||||
     [Matthew D Wood (Intel Corp)]
 | 
			
		||||
 | 
			
		||||
  *) Squeeze another 10% out of IGE mode when in != out.
 | 
			
		||||
     [Ben Laurie]
 | 
			
		||||
 | 
			
		||||
  *) AES IGE mode speedup.
 | 
			
		||||
     [Dean Gaudet (Google)]
 | 
			
		||||
 | 
			
		||||
  *) Add the Korean symmetric 128-bit cipher SEED (see
 | 
			
		||||
     http://www.kisa.or.kr/kisa/seed/jsp/seed_eng.jsp) and
 | 
			
		||||
     add SEED ciphersuites from RFC 4162:
 | 
			
		||||
 | 
			
		||||
        TLS_RSA_WITH_SEED_CBC_SHA      =  "SEED-SHA"
 | 
			
		||||
        TLS_DHE_DSS_WITH_SEED_CBC_SHA  =  "DHE-DSS-SEED-SHA"
 | 
			
		||||
        TLS_DHE_RSA_WITH_SEED_CBC_SHA  =  "DHE-RSA-SEED-SHA"
 | 
			
		||||
        TLS_DH_anon_WITH_SEED_CBC_SHA  =  "ADH-SEED-SHA"
 | 
			
		||||
 | 
			
		||||
     To minimize changes between patchlevels in the OpenSSL 0.9.8
 | 
			
		||||
     series, SEED remains excluded from compilation unless OpenSSL
 | 
			
		||||
     is configured with 'enable-seed'.
 | 
			
		||||
     [KISA, Bodo Moeller]
 | 
			
		||||
 | 
			
		||||
  *) Mitigate branch prediction attacks, which can be practical if a
 | 
			
		||||
     single processor is shared, allowing a spy process to extract
 | 
			
		||||
     information.  For detailed background information, see
 | 
			
		||||
     http://eprint.iacr.org/2007/039 (O. Aciicmez, S. Gueron,
 | 
			
		||||
     J.-P. Seifert, "New Branch Prediction Vulnerabilities in OpenSSL
 | 
			
		||||
     and Necessary Software Countermeasures").  The core of the change
 | 
			
		||||
     are new versions BN_div_no_branch() and
 | 
			
		||||
     BN_mod_inverse_no_branch() of BN_div() and BN_mod_inverse(),
 | 
			
		||||
     respectively, which are slower, but avoid the security-relevant
 | 
			
		||||
     conditional branches.  These are automatically called by BN_div()
 | 
			
		||||
     and BN_mod_inverse() if the flag BN_FLG_CONSTTIME is set for one
 | 
			
		||||
     of the input BIGNUMs.  Also, BN_is_bit_set() has been changed to
 | 
			
		||||
     remove a conditional branch.
 | 
			
		||||
 | 
			
		||||
     BN_FLG_CONSTTIME is the new name for the previous
 | 
			
		||||
     BN_FLG_EXP_CONSTTIME flag, since it now affects more than just
 | 
			
		||||
     modular exponentiation.  (Since OpenSSL 0.9.7h, setting this flag
 | 
			
		||||
     in the exponent causes BN_mod_exp_mont() to use the alternative
 | 
			
		||||
     implementation in BN_mod_exp_mont_consttime().)  The old name
 | 
			
		||||
     remains as a deprecated alias.
 | 
			
		||||
 | 
			
		||||
     Similary, RSA_FLAG_NO_EXP_CONSTTIME is replaced by a more general
 | 
			
		||||
     RSA_FLAG_NO_CONSTTIME flag since the RSA implementation now uses
 | 
			
		||||
     constant-time implementations for more than just exponentiation.
 | 
			
		||||
     Here too the old name is kept as a deprecated alias.
 | 
			
		||||
 | 
			
		||||
     BN_BLINDING_new() will now use BN_dup() for the modulus so that
 | 
			
		||||
     the BN_BLINDING structure gets an independent copy of the
 | 
			
		||||
     modulus.  This means that the previous "BIGNUM *m" argument to
 | 
			
		||||
     BN_BLINDING_new() and to BN_BLINDING_create_param() now
 | 
			
		||||
     essentially becomes "const BIGNUM *m", although we can't actually
 | 
			
		||||
     change this in the header file before 0.9.9.  It allows
 | 
			
		||||
     RSA_setup_blinding() to use BN_with_flags() on the modulus to
 | 
			
		||||
     enable BN_FLG_CONSTTIME.
 | 
			
		||||
 | 
			
		||||
     [Matthew D Wood (Intel Corp)]
 | 
			
		||||
 | 
			
		||||
  *) In the SSL/TLS server implementation, be strict about session ID
 | 
			
		||||
     context matching (which matters if an application uses a single
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										322
									
								
								Configure
									
									
									
									
									
								
							
							
						
						
									
										322
									
								
								Configure
									
									
									
									
									
								
							@@ -6,7 +6,9 @@ eval 'exec perl -S $0 ${1+"$@"}'
 | 
			
		||||
##
 | 
			
		||||
 | 
			
		||||
require 5.000;
 | 
			
		||||
use strict;
 | 
			
		||||
eval 'use strict;';
 | 
			
		||||
 | 
			
		||||
print STDERR "Warning: perl module strict not found.\n" if ($@);
 | 
			
		||||
 | 
			
		||||
# see INSTALL for instructions.
 | 
			
		||||
 | 
			
		||||
@@ -114,15 +116,17 @@ my $tlib="-lnsl -lsocket";
 | 
			
		||||
my $bits1="THIRTY_TWO_BIT ";
 | 
			
		||||
my $bits2="SIXTY_FOUR_BIT ";
 | 
			
		||||
 | 
			
		||||
my $x86_elf_asm="x86cpuid-elf.o:bn86-elf.o co86-elf.o:dx86-elf.o yx86-elf.o:ax86-elf.o:bx86-elf.o:mx86-elf.o:sx86-elf.o s512sse2-elf.o:cx86-elf.o:rx86-elf.o:rm86-elf.o:r586-elf.o";
 | 
			
		||||
my $x86_coff_asm="x86cpuid-cof.o:bn86-cof.o co86-cof.o:dx86-cof.o yx86-cof.o:ax86-cof.o:bx86-cof.o:mx86-cof.o:sx86-cof.o s512sse2-cof.o:cx86-cof.o:rx86-cof.o:rm86-cof.o:r586-cof.o";
 | 
			
		||||
my $x86_out_asm="x86cpuid-out.o:bn86-out.o co86-out.o:dx86-out.o yx86-out.o:ax86-out.o:bx86-out.o:mx86-out.o:sx86-out.o s512sse2-out.o:cx86-out.o:rx86-out.o:rm86-out.o:r586-out.o";
 | 
			
		||||
my $x86_elf_asm="x86cpuid-elf.o:bn86-elf.o co86-elf.o mo86-elf.o:dx86-elf.o yx86-elf.o:ax86-elf.o:bx86-elf.o:mx86-elf.o:sx86-elf.o s512sse2-elf.o:cx86-elf.o:rx86-elf.o:rm86-elf.o:r586-elf.o";
 | 
			
		||||
my $x86_coff_asm="x86cpuid-cof.o:bn86-cof.o co86-cof.o mo86-cof.o:dx86-cof.o yx86-cof.o:ax86-cof.o:bx86-cof.o:mx86-cof.o:sx86-cof.o s512sse2-cof.o:cx86-cof.o:rx86-cof.o:rm86-cof.o:r586-cof.o";
 | 
			
		||||
my $x86_out_asm="x86cpuid-out.o:bn86-out.o co86-out.o mo86-out.o:dx86-out.o yx86-out.o:ax86-out.o:bx86-out.o:mx86-out.o:sx86-out.o s512sse2-out.o:cx86-out.o:rx86-out.o:rm86-out.o:r586-out.o";
 | 
			
		||||
 | 
			
		||||
my $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o::::md5-x86_64.o:::rc4-x86_64.o::";
 | 
			
		||||
my $ia64_asm=":bn-ia64.o::aes_core.o aes_cbc.o aes-ia64.o:::sha1-ia64.o sha256-ia64.o sha512-ia64.o::rc4-ia64.o::";
 | 
			
		||||
my $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o x86_64-mont.o::aes-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o::";
 | 
			
		||||
 | 
			
		||||
my $no_asm="::::::::::";
 | 
			
		||||
 | 
			
		||||
my $ia64_asm=$no_asm;
 | 
			
		||||
my $s390x_asm=$no_asm;
 | 
			
		||||
 | 
			
		||||
# As for $BSDthreads. Idea is to maintain "collective" set of flags,
 | 
			
		||||
# which would cover all BSD flavors. -pthread applies to them all, 
 | 
			
		||||
# but is treated differently. OpenBSD expands is as -D_POSIX_THREAD
 | 
			
		||||
@@ -155,7 +159,7 @@ my %table=(
 | 
			
		||||
"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 | 
			
		||||
"debug-bodo",	"gcc:-DL_ENDIAN -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBIO_PAIR_DEBUG -DPEDANTIC -g -march=i486 -pedantic -Wshadow -Wall::-D_REENTRANT:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
 | 
			
		||||
"debug-ulf", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DBN_DEBUG_RAND -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations:::CYGWIN32:::${no_asm}:win32:cygwin-shared:::.dll",
 | 
			
		||||
"debug-steve",	"gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -march=i486 -pedantic -Wno-long-long -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared",
 | 
			
		||||
"debug-steve",	"gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -m32 -pedantic -Wno-long-long -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared",
 | 
			
		||||
"debug-steve-linux-pseudo64",	"gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DOPENSSL_NO_ASM -g -mcpu=i486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:SIXTY_FOUR_BIT:${no_asm}:dlfcn:linux-shared",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
@@ -199,25 +203,25 @@ my %table=(
 | 
			
		||||
 | 
			
		||||
#### SPARC Solaris with GNU C setups
 | 
			
		||||
"solaris-sparcv7-gcc","gcc:-O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv8-gcc","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv8-gcc","gcc:-mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# -m32 should be safe to add as long as driver recognizes -mcpu=ultrasparc
 | 
			
		||||
"solaris-sparcv9-gcc","gcc:-m32 -mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::sparcv8plus.o:des_enc-sparc.o fcrypt_b.o:::md5-sparcv8plus.o::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-sparcv9-gcc","gcc:-m64 -mcpu=ultrasparc -O3 -Wall -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:::des_enc-sparc.o fcrypt_b.o:::md5-sparcv9.o::::::dlfcn:solaris-shared:-fPIC:-m64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv9-gcc","gcc:-m32 -mcpu=ultrasparc -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-sparcv9-gcc","gcc:-m64 -mcpu=ultrasparc -O3 -Wall -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-fPIC:-m64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
####
 | 
			
		||||
"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mv8 -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::sparcv8.o::::::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv9-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG_ALL -DPEDANTIC -O -g -mcpu=ultrasparc -pedantic -ansi -Wall -Wshadow -Wno-long-long -D__EXTENSIONS__ -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::sparcv8plus.o:des_enc-sparc.o fcrypt_b.o:::md5-sparcv8plus.o::::::dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mv8 -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv9-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG_ALL -DPEDANTIC -O -g -mcpu=ultrasparc -pedantic -ansi -Wall -Wshadow -Wno-long-long -D__EXTENSIONS__ -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### SPARC Solaris with Sun C setups
 | 
			
		||||
# SC4.0 doesn't pass 'make test', upgrade to SC5.0 or SC4.2.
 | 
			
		||||
# SC4.2 is ok, better than gcc even on bn as long as you tell it -xarch=v8
 | 
			
		||||
# SC5.0 note: Compiler common patch 107357-01 or later is required!
 | 
			
		||||
"solaris-sparcv7-cc","cc:-xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR::sparcv8plus.o:des_enc-sparc.o fcrypt_b.o:::md5-sparcv8plus.o::::::dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:::des_enc-sparc.o fcrypt_b.o:::md5-sparcv9.o::::::dlfcn:solaris-shared:-KPIC:-xarch=v9 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):/usr/ccs/bin/ar rs",
 | 
			
		||||
"solaris-sparcv8-cc","cc:-xarch=v8 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv9-cc","cc:-xtarget=ultra -xarch=v8plus -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris64-sparcv9-cc","cc:-xtarget=ultra -xarch=v9 -xO5 -xstrconst -xdepend -Xa -DB_ENDIAN::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-xarch=v9 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):/usr/ccs/bin/ar rs",
 | 
			
		||||
####
 | 
			
		||||
"debug-solaris-sparcv8-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG_ALL -xarch=v8 -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::sparcv8.o::::::::::dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv9-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG_ALL -xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR::sparcv8plus.o::::md5-sparcv8plus.o::::::dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 
 | 
			
		||||
"debug-solaris-sparcv8-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG_ALL -xarch=v8 -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv9-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG_ALL -xtarget=ultra -xarch=v8plus -g -O -xstrconst -Xa -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 
 | 
			
		||||
 | 
			
		||||
#### SunOS configs, assuming sparc for the gcc one.
 | 
			
		||||
#"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown):SUNOS::DES_UNROLL:${no_asm}::",
 | 
			
		||||
@@ -230,11 +234,11 @@ my %table=(
 | 
			
		||||
#### IRIX 6.x configs
 | 
			
		||||
# Only N32 and N64 ABIs are supported. If you need O32 ABI build, invoke
 | 
			
		||||
# './Configure irix-cc -o32' manually.
 | 
			
		||||
"irix-mips3-gcc","gcc:-mabi=n32 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK_LL DES_UNROLL DES_RISC2 DES_PTR BF_PTR SIXTY_FOUR_BIT::bn-mips3.o::::::::::dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT::bn-mips3.o::::::::::dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-mips3-gcc","gcc:-mabi=n32 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK_LL DES_UNROLL DES_RISC2 DES_PTR BF_PTR SIXTY_FOUR_BIT:${no_asm}:dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT:${no_asm}:dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# N64 ABI builds.
 | 
			
		||||
"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG::bn-mips3.o::::::::::dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG::bn-mips3.o::::::::::dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${no_asm}:dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${no_asm}:dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### Unified HP-UX ANSI C configs.
 | 
			
		||||
# Special notes:
 | 
			
		||||
@@ -267,8 +271,8 @@ my %table=(
 | 
			
		||||
# Since there is mention of this in shlib/hpux10-cc.sh
 | 
			
		||||
"hpux-parisc-cc-o4","cc:-Ae +O4 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc2-gcc","gcc:-march=2.0 -O3 -DB_ENDIAN -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1::pa-risc2.o::::::::::dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2W.o::::::::::dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc2-gcc","gcc:-march=2.0 -O3 -DB_ENDIAN -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${no_asm}:dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# More attempts at unified 10.X and 11.X targets for HP C compiler.
 | 
			
		||||
#
 | 
			
		||||
@@ -276,8 +280,8 @@ my %table=(
 | 
			
		||||
# Kevin Steves <ks@hp.se>
 | 
			
		||||
"hpux-parisc-cc","cc:+O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc1_0-cc","cc:+DAportable +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2.o::::::::::dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc2-cc","cc:+DD64 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2W.o::::::::::dlfcn:hpux-shared:+Z:+DD64 -b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc2-cc","cc:+DA2.0 +DS2.0 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${no_asm}:dl:hpux-shared:+Z:-b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc2-cc","cc:+DD64 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:${no_asm}:dlfcn:hpux-shared:+Z:+DD64 -b:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# HP/UX IA-64 targets
 | 
			
		||||
"hpux-ia64-cc","cc:-Ae +DD32 +O2 +Olit=all -z -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT:${ia64_asm}:dlfcn:hpux-shared:+Z:+DD32 -b:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
@@ -314,27 +318,28 @@ my %table=(
 | 
			
		||||
# *-generic* is endian-neutral target, but ./config is free to
 | 
			
		||||
# throw in -D[BL]_ENDIAN, whichever appropriate...
 | 
			
		||||
"linux-generic32","gcc:-DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ppc",	"gcc:-DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL::linux_ppc32.o::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ppc",	"gcc:-DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
#### IA-32 targets...
 | 
			
		||||
"linux-ia32-icc",	"icc:-DL_ENDIAN -DTERMIO -O2 -no_cpprt::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-elf",	"gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-aout",	"gcc:-DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -march=i486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}",
 | 
			
		||||
####
 | 
			
		||||
"linux-generic64","gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ppc64",	"gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL::linux_ppc64.o::::::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ppc64",	"gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${no_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64",	"gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-ecc","ecc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-icc","icc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-x86_64",	"gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-s390x",  "gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
#### SPARC Linux setups
 | 
			
		||||
# Ray Miller <ray.miller@computing-services.oxford.ac.uk> has patiently
 | 
			
		||||
# assisted with debugging of following two configs.
 | 
			
		||||
"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-sparcv8","gcc:-mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# it's a real mess with -mcpu=ultrasparc option under Linux, but
 | 
			
		||||
# -Wa,-Av8plus should do the trick no matter what.
 | 
			
		||||
"linux-sparcv9","gcc:-m32 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::sparcv8plus.o:des_enc-sparc.o fcrypt_b.o:::md5-sparcv8plus.o::::::dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-sparcv9","gcc:-m32 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# GCC 3.1 is a requirement
 | 
			
		||||
"linux64-sparcv9","gcc:-m64 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:ULTRASPARC:-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::des_enc-sparc.o fcrypt_b.o:::md5-sparcv9.o::::::dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux64-sparcv9","gcc:-m64 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:ULTRASPARC:-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
#### Alpha Linux with GNU C and Compaq C setups
 | 
			
		||||
# Special notes:
 | 
			
		||||
# - linux-alpha+bwx-gcc is ment to be used from ./config only. If you
 | 
			
		||||
@@ -358,13 +363,13 @@ my %table=(
 | 
			
		||||
"BSD-x86",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_out_asm}:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-x86-elf",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-BSD-x86-elf",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -Wall -g::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-sparcv8",	"gcc:-DB_ENDIAN -DTERMIOS -O3 -mv8 -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL::sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-sparcv8",	"gcc:-DB_ENDIAN -DTERMIOS -O3 -mv8 -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
"BSD-generic64","gcc:-DTERMIOS -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# -DMD32_REG_T=int doesn't actually belong in sparc64 target, it
 | 
			
		||||
# simply *happens* to work around a compiler bug in gcc 3.3.3,
 | 
			
		||||
# triggered by RIPEMD160 code.
 | 
			
		||||
"BSD-sparc64",	"gcc:-DB_ENDIAN -DTERMIOS -O3 -DMD32_REG_T=int -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC2_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC2 BF_PTR:::des_enc-sparc.o fcrypt_b.o:::md5-sparcv9.o::::::dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-sparc64",	"gcc:-DB_ENDIAN -DTERMIOS -O3 -DMD32_REG_T=int -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC2_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC2 BF_PTR:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-ia64",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK:${ia64_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-x86_64",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -DMD32_REG_T=int -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
@@ -402,12 +407,12 @@ my %table=(
 | 
			
		||||
 | 
			
		||||
#### IBM's AIX.
 | 
			
		||||
"aix3-cc",  "cc:-O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::BN_LLONG RC4_CHAR:::",
 | 
			
		||||
"aix-gcc",  "gcc:-O -DB_ENDIAN::-D_THREAD_SAFE:AIX::BN_LLONG RC4_CHAR::aix_ppc32.o::::::::::dlfcn:",
 | 
			
		||||
"aix64-gcc","gcc:-maix64 -O -DB_ENDIAN::-D_THREAD_SAFE:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR::aix_ppc64.o::::::::::dlfcn::::::-X64",
 | 
			
		||||
"aix-gcc",  "gcc:-O -DB_ENDIAN::-D_THREAD_SAFE:AIX::BN_LLONG RC4_CHAR:${no_asm}:dlfcn:aix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
 | 
			
		||||
"aix64-gcc","gcc:-maix64 -O -DB_ENDIAN::-D_THREAD_SAFE:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${no_asm}:dlfcn:aix-shared::-maix64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X64",
 | 
			
		||||
# Below targets assume AIX 5. Idea is to effectively disregard $OBJECT_MODE
 | 
			
		||||
# at build time. $OBJECT_MODE is respected at ./config stage!
 | 
			
		||||
"aix-cc",   "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384::-qthreaded:AIX::BN_LLONG RC4_CHAR::aix_ppc32.o::::::::::dlfcn:aix-shared::-q32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
 | 
			
		||||
"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384::-qthreaded:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR::aix_ppc64.o::::::::::dlfcn:aix-shared::-q64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
 | 
			
		||||
"aix-cc",   "cc:-q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::BN_LLONG RC4_CHAR:${no_asm}:dlfcn:aix-shared::-q32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 32",
 | 
			
		||||
"aix64-cc", "cc:-q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst::-qthreaded:AIX::SIXTY_FOUR_BIT_LONG RC4_CHAR:${no_asm}:dlfcn:aix-shared::-q64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)::-X 64",
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Cray T90 and similar (SDSC)
 | 
			
		||||
@@ -499,9 +504,9 @@ my %table=(
 | 
			
		||||
 | 
			
		||||
##### MacOS X (a.k.a. Rhapsody or Darwin) setup
 | 
			
		||||
"rhapsody-ppc-cc","cc:-O3 -DB_ENDIAN::(unknown):MACOSX_RHAPSODY::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}::",
 | 
			
		||||
"darwin-ppc-cc","cc:-O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc32.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin-i386-cc","cc:-O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR::osx_ppc32.o::::::::::dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin-ppc-cc","cc:-O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"darwin-i386-cc","cc:-O3 -fomit-frame-pointer -fno-common::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
"debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
 | 
			
		||||
 | 
			
		||||
##### A/UX
 | 
			
		||||
"aux3-gcc","gcc:-O2 -DTERMIO::(unknown):AUX:-lbsd:RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:::",
 | 
			
		||||
@@ -561,7 +566,13 @@ my $idx_arflags = $idx++;
 | 
			
		||||
my $prefix="";
 | 
			
		||||
my $openssldir="";
 | 
			
		||||
my $exe_ext="";
 | 
			
		||||
my $install_prefix="";
 | 
			
		||||
my $install_prefix="$ENV{'INSTALL_PREFIX'}";
 | 
			
		||||
my $cross_compile_prefix="$ENV{'CROSS_COMPILE'}";
 | 
			
		||||
my $fipslibdir="/usr/local/ssl/lib/fips-1.0/";
 | 
			
		||||
my $nofipscanistercheck=0;
 | 
			
		||||
my $fipsdso=0;
 | 
			
		||||
my $fipscanisterinternal="n";
 | 
			
		||||
my $baseaddr="0xFB00000";
 | 
			
		||||
my $no_threads=0;
 | 
			
		||||
my $threads=0;
 | 
			
		||||
my $no_shared=0; # but "no-shared" is default
 | 
			
		||||
@@ -584,6 +595,7 @@ my $rc2	="crypto/rc2/rc2.h";
 | 
			
		||||
my $bf	="crypto/bf/bf_locl.h";
 | 
			
		||||
my $bn_asm	="bn_asm.o";
 | 
			
		||||
my $des_enc="des_enc.o fcrypt_b.o";
 | 
			
		||||
my $fips_des_enc="fips_des_enc.o";
 | 
			
		||||
my $aes_enc="aes_core.o aes_cbc.o";
 | 
			
		||||
my $bf_enc	="bf_enc.o";
 | 
			
		||||
my $cast_enc="c_enc.o";
 | 
			
		||||
@@ -595,16 +607,18 @@ my $rmd160_obj="";
 | 
			
		||||
my $processor="";
 | 
			
		||||
my $default_ranlib;
 | 
			
		||||
my $perl;
 | 
			
		||||
my $fips=0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# All of the following is disabled by default (RC5 was enabled before 0.9.8):
 | 
			
		||||
 | 
			
		||||
my %disabled = ( # "what"         => "comment"
 | 
			
		||||
		 "camellia"	  => "default",
 | 
			
		||||
		 "gmp"		  => "default",
 | 
			
		||||
                 "camellia"       => "default",
 | 
			
		||||
                 "gmp"            => "default",
 | 
			
		||||
                 "mdc2"           => "default",
 | 
			
		||||
                 "rc5"            => "default",
 | 
			
		||||
		 "rfc3779"	  => "default",
 | 
			
		||||
                 "rfc3779"        => "default",
 | 
			
		||||
                 "seed"           => "default",
 | 
			
		||||
                 "shared"         => "default",
 | 
			
		||||
                 "zlib"           => "default",
 | 
			
		||||
                 "zlib-dynamic"   => "default"
 | 
			
		||||
@@ -615,7 +629,7 @@ my %disabled = ( # "what"         => "comment"
 | 
			
		||||
# For symmetry, "disable-..." is a synonym for "no-...".
 | 
			
		||||
 | 
			
		||||
# This is what $depflags will look like with the above default:
 | 
			
		||||
my $default_depflags = "-DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_GMP -DOPENSSL_NO_MDC2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 ";
 | 
			
		||||
my $default_depflags = "-DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_GMP -DOPENSSL_NO_MDC2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SEED ";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
my $no_sse2=0;
 | 
			
		||||
@@ -718,12 +732,36 @@ PROCESS_ARGS:
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^386$/)
 | 
			
		||||
			{ $processor=386; }
 | 
			
		||||
		elsif (/^fips$/)
 | 
			
		||||
			{
 | 
			
		||||
			$fips=1;
 | 
			
		||||
		        }
 | 
			
		||||
		elsif (/^rsaref$/)
 | 
			
		||||
			{
 | 
			
		||||
			# No RSAref support any more since it's not needed.
 | 
			
		||||
			# The check for the option is there so scripts aren't
 | 
			
		||||
			# broken
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^nofipscanistercheck$/)
 | 
			
		||||
			{
 | 
			
		||||
			$fips = 1;
 | 
			
		||||
			$nofipscanistercheck = 1;
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^fipscanisterbuild$/)
 | 
			
		||||
			{
 | 
			
		||||
			$fips = 1;
 | 
			
		||||
			$nofipscanistercheck = 1;
 | 
			
		||||
			$fipslibdir="";
 | 
			
		||||
			$fipscanisterinternal="y";
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^fipsdso$/)
 | 
			
		||||
			{
 | 
			
		||||
			$fips = 1;
 | 
			
		||||
			$nofipscanistercheck = 1;
 | 
			
		||||
			$fipslibdir="";
 | 
			
		||||
			$fipscanisterinternal="y";
 | 
			
		||||
			$fipsdso = 1;
 | 
			
		||||
			}
 | 
			
		||||
		elsif (/^[-+]/)
 | 
			
		||||
			{
 | 
			
		||||
			if (/^-[lL](.*)$/)
 | 
			
		||||
@@ -758,6 +796,14 @@ PROCESS_ARGS:
 | 
			
		||||
				{
 | 
			
		||||
				$withargs{"zlib-include"}="-I$1";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--with-fipslibdir=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$fipslibdir="$1/";
 | 
			
		||||
				}
 | 
			
		||||
			elsif (/^--with-baseaddr=(.*)$/)
 | 
			
		||||
				{
 | 
			
		||||
				$baseaddr="$1";
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				print STDERR $usage;
 | 
			
		||||
@@ -861,6 +907,41 @@ print "Configuring for $target\n";
 | 
			
		||||
 | 
			
		||||
&usage if (!defined($table{$target}));
 | 
			
		||||
 | 
			
		||||
my @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
 | 
			
		||||
my $cc = $fields[$idx_cc];
 | 
			
		||||
my $cflags = $fields[$idx_cflags];
 | 
			
		||||
my $unistd = $fields[$idx_unistd];
 | 
			
		||||
my $thread_cflag = $fields[$idx_thread_cflag];
 | 
			
		||||
my $sys_id = $fields[$idx_sys_id];
 | 
			
		||||
my $lflags = $fields[$idx_lflags];
 | 
			
		||||
my $bn_ops = $fields[$idx_bn_ops];
 | 
			
		||||
my $cpuid_obj = $fields[$idx_cpuid_obj];
 | 
			
		||||
my $bn_obj = $fields[$idx_bn_obj];
 | 
			
		||||
my $des_obj = $fields[$idx_des_obj];
 | 
			
		||||
my $aes_obj = $fields[$idx_aes_obj];
 | 
			
		||||
my $bf_obj = $fields[$idx_bf_obj];
 | 
			
		||||
my $md5_obj = $fields[$idx_md5_obj];
 | 
			
		||||
my $sha1_obj = $fields[$idx_sha1_obj];
 | 
			
		||||
my $cast_obj = $fields[$idx_cast_obj];
 | 
			
		||||
my $rc4_obj = $fields[$idx_rc4_obj];
 | 
			
		||||
my $rmd160_obj = $fields[$idx_rmd160_obj];
 | 
			
		||||
my $rc5_obj = $fields[$idx_rc5_obj];
 | 
			
		||||
my $dso_scheme = $fields[$idx_dso_scheme];
 | 
			
		||||
my $shared_target = $fields[$idx_shared_target];
 | 
			
		||||
my $shared_cflag = $fields[$idx_shared_cflag];
 | 
			
		||||
my $shared_ldflag = $fields[$idx_shared_ldflag];
 | 
			
		||||
my $shared_extension = $fields[$idx_shared_extension];
 | 
			
		||||
my $ranlib = $fields[$idx_ranlib];
 | 
			
		||||
my $arflags = $fields[$idx_arflags];
 | 
			
		||||
 | 
			
		||||
if ($fips)
 | 
			
		||||
	{
 | 
			
		||||
	delete $disabled{"shared"} if ($disabled{"shared"} eq "default");
 | 
			
		||||
	$disabled{"asm"}="forced"
 | 
			
		||||
		if ($target !~ "VC\-.*" &&
 | 
			
		||||
		    "$cpuid_obj:$bn_obj:$aes_obj:$des_obj:$sha1_obj" eq "::::");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
foreach (sort (keys %disabled))
 | 
			
		||||
	{
 | 
			
		||||
@@ -922,9 +1003,21 @@ my $IsMK1MF=scalar grep /^$target$/,@MK1MF_Builds;
 | 
			
		||||
 | 
			
		||||
$IsMK1MF=1 if ($target eq "mingw" && $^O ne "cygwin" && !is_msys());
 | 
			
		||||
 | 
			
		||||
$no_shared = 0 if ($fipsdso && !$IsMK1MF);
 | 
			
		||||
 | 
			
		||||
$exe_ext=".exe" if ($target eq "Cygwin" || $target eq "DJGPP" || $target eq "mingw");
 | 
			
		||||
$exe_ext=".pm"  if ($target =~ /vos/);
 | 
			
		||||
$openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq "");
 | 
			
		||||
if ($openssldir eq "" and $prefix eq "")
 | 
			
		||||
	{
 | 
			
		||||
	if ($fips)
 | 
			
		||||
		{
 | 
			
		||||
		$openssldir="/usr/local/ssl/fips-1.0";
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		$openssldir="/usr/local/ssl";
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
$prefix=$openssldir if $prefix eq "";
 | 
			
		||||
 | 
			
		||||
$default_ranlib= &which("ranlib") or $default_ranlib="true";
 | 
			
		||||
@@ -940,32 +1033,10 @@ $openssldir=$prefix . "/" . $openssldir if $openssldir !~ /(^\/|^[a-zA-Z]:[\\\/]
 | 
			
		||||
 | 
			
		||||
print "IsMK1MF=$IsMK1MF\n";
 | 
			
		||||
 | 
			
		||||
my @fields = split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
 | 
			
		||||
my $cc = $fields[$idx_cc];
 | 
			
		||||
my $cflags = $fields[$idx_cflags];
 | 
			
		||||
my $unistd = $fields[$idx_unistd];
 | 
			
		||||
my $thread_cflag = $fields[$idx_thread_cflag];
 | 
			
		||||
my $sys_id = $fields[$idx_sys_id];
 | 
			
		||||
my $lflags = $fields[$idx_lflags];
 | 
			
		||||
my $bn_ops = $fields[$idx_bn_ops];
 | 
			
		||||
my $cpuid_obj = $fields[$idx_cpuid_obj];
 | 
			
		||||
my $bn_obj = $fields[$idx_bn_obj];
 | 
			
		||||
my $des_obj = $fields[$idx_des_obj];
 | 
			
		||||
my $aes_obj = $fields[$idx_aes_obj];
 | 
			
		||||
my $bf_obj = $fields[$idx_bf_obj];
 | 
			
		||||
my $md5_obj = $fields[$idx_md5_obj];
 | 
			
		||||
my $sha1_obj = $fields[$idx_sha1_obj];
 | 
			
		||||
my $cast_obj = $fields[$idx_cast_obj];
 | 
			
		||||
my $rc4_obj = $fields[$idx_rc4_obj];
 | 
			
		||||
my $rmd160_obj = $fields[$idx_rmd160_obj];
 | 
			
		||||
my $rc5_obj = $fields[$idx_rc5_obj];
 | 
			
		||||
my $dso_scheme = $fields[$idx_dso_scheme];
 | 
			
		||||
my $shared_target = $fields[$idx_shared_target];
 | 
			
		||||
my $shared_cflag = $fields[$idx_shared_cflag];
 | 
			
		||||
my $shared_ldflag = $fields[$idx_shared_ldflag];
 | 
			
		||||
my $shared_extension = $fields[$idx_shared_extension];
 | 
			
		||||
my $ranlib = $fields[$idx_ranlib];
 | 
			
		||||
my $arflags = $fields[$idx_arflags];
 | 
			
		||||
# '%' in $lflags is used to split flags to "pre-" and post-flags
 | 
			
		||||
my ($prelflags,$postlflags)=split('%',$lflags);
 | 
			
		||||
if (defined($postlflags))	{ $lflags=$postlflags;  }
 | 
			
		||||
else				{ $lflags=$prelflags; undef $prelflags; }
 | 
			
		||||
 | 
			
		||||
my $no_shared_warn=0;
 | 
			
		||||
my $no_user_cflags=0;
 | 
			
		||||
@@ -1095,6 +1166,8 @@ if ($no_asm)
 | 
			
		||||
	{
 | 
			
		||||
	$cpuid_obj=$bn_obj=$des_obj=$aes_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj="";
 | 
			
		||||
	$sha1_obj=$md5_obj=$rmd160_obj="";
 | 
			
		||||
	$cflags=~s/\-D[BL]_ENDIAN//		if ($fips);
 | 
			
		||||
	$thread_cflags=~s/\-D[BL]_ENDIAN//	if ($fips);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if (!$no_shared)
 | 
			
		||||
@@ -1125,7 +1198,7 @@ if ($zlib)
 | 
			
		||||
my $shared_mark = "";
 | 
			
		||||
if ($shared_target eq "")
 | 
			
		||||
	{
 | 
			
		||||
	$no_shared_warn = 1 if !$no_shared;
 | 
			
		||||
	$no_shared_warn = 1 if !$no_shared && !$fips;
 | 
			
		||||
	$no_shared = 1;
 | 
			
		||||
	}
 | 
			
		||||
if (!$no_shared)
 | 
			
		||||
@@ -1149,12 +1222,19 @@ if (!$IsMK1MF)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
$cpuid_obj.=" uplink.o uplink-cof.o" if ($cflags =~ /\-DOPENSSL_USE_APPLINK/);
 | 
			
		||||
# Compiler fix-ups
 | 
			
		||||
if ($target =~ /icc$/)
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Platform fix-ups
 | 
			
		||||
#
 | 
			
		||||
if ($target =~ /\-icc$/)	# Intel C compiler
 | 
			
		||||
	{
 | 
			
		||||
	my($iccver)=`$cc -V 2>&1`;
 | 
			
		||||
	if ($iccver =~ /Version ([0-9]+)\./)	{ $iccver=$1; }
 | 
			
		||||
	else					{ $iccver=0;  }
 | 
			
		||||
	my $iccver=0;
 | 
			
		||||
	if (open(FD,"$cc -V 2>&1 |"))
 | 
			
		||||
		{
 | 
			
		||||
		while(<FD>) { $iccver=$1 if (/Version ([0-9]+)\./); }
 | 
			
		||||
		close(FD);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if ($iccver>=8)
 | 
			
		||||
		{
 | 
			
		||||
		# Eliminate unnecessary dependency from libirc.a. This is
 | 
			
		||||
@@ -1162,6 +1242,28 @@ if ($target =~ /icc$/)
 | 
			
		||||
		# apps/openssl can end up in endless loop upon startup...
 | 
			
		||||
		$cflags.=" -Dmemcpy=__builtin_memcpy -Dmemset=__builtin_memset";
 | 
			
		||||
		}
 | 
			
		||||
	if ($iccver>=9)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags.=" -i-static";
 | 
			
		||||
		$cflags=~s/\-no_cpprt/-no-cpprt/;
 | 
			
		||||
		}
 | 
			
		||||
	if ($iccver>=10)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags=~s/\-i\-static/-static-intel/;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
# Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
 | 
			
		||||
# linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
 | 
			
		||||
# .so objects. Apparently application RPATH is not global and does
 | 
			
		||||
# not apply to .so linked with other .so. Problem manifests itself
 | 
			
		||||
# when libssl.so fails to load libcrypto.so. One can argue that we
 | 
			
		||||
# should engrave this into Makefile.shared rules or into BSD-* config
 | 
			
		||||
# lines above. Meanwhile let's try to be cautious and pass -rpath to
 | 
			
		||||
# linker only when --prefix is not /usr.
 | 
			
		||||
if ($target =~ /^BSD\-/)
 | 
			
		||||
	{
 | 
			
		||||
	$shared_ldflag.=" -Wl,-rpath,\$(LIBRPATH)" if ($prefix !~ m|^/usr[/]*$|);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
if ($sys_id ne "")
 | 
			
		||||
@@ -1187,6 +1289,13 @@ $bn_obj = $bn_asm unless $bn_obj ne "";
 | 
			
		||||
$cflags.=" -DOPENSSL_BN_ASM_PART_WORDS" if ($bn_obj =~ /bn86/);
 | 
			
		||||
$cflags.=" -DOPENSSL_IA32_SSE2" if (!$no_sse2 && $bn_obj =~ /bn86/);
 | 
			
		||||
 | 
			
		||||
$cflags.=" -DOPENSSL_BN_ASM_MONT" if ($bn_obj =~ /\-mont|mo86\-/);
 | 
			
		||||
 | 
			
		||||
if ($fips)
 | 
			
		||||
	{
 | 
			
		||||
	$openssl_other_defines.="#define OPENSSL_FIPS\n";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
$des_obj=$des_enc	unless ($des_obj =~ /\.o$/);
 | 
			
		||||
$bf_obj=$bf_enc		unless ($bf_obj =~ /\.o$/);
 | 
			
		||||
$cast_obj=$cast_enc	unless ($cast_obj =~ /\.o$/);
 | 
			
		||||
@@ -1198,7 +1307,7 @@ if ($sha1_obj =~ /\.o$/)
 | 
			
		||||
	$cflags.=" -DSHA1_ASM"   if ($sha1_obj =~ /sx86/ || $sha1_obj =~ /sha1/);
 | 
			
		||||
	$cflags.=" -DSHA256_ASM" if ($sha1_obj =~ /sha256/);
 | 
			
		||||
	$cflags.=" -DSHA512_ASM" if ($sha1_obj =~ /sha512/);
 | 
			
		||||
	if ($sha1_obj =~ /x86/)
 | 
			
		||||
	if ($sha1_obj =~ /sse2/)
 | 
			
		||||
	    {	if ($no_sse2)
 | 
			
		||||
		{   $sha1_obj =~ s/\S*sse2\S+//;        }
 | 
			
		||||
		elsif ($cflags !~ /OPENSSL_IA32_SSE2/)
 | 
			
		||||
@@ -1289,10 +1398,20 @@ while (<IN>)
 | 
			
		||||
	s/^PLATFORM=.*$/PLATFORM=$target/;
 | 
			
		||||
	s/^OPTIONS=.*$/OPTIONS=$options/;
 | 
			
		||||
	s/^CONFIGURE_ARGS=.*$/CONFIGURE_ARGS=$argvstring/;
 | 
			
		||||
	s/^CC=.*$/CC= $cc/;
 | 
			
		||||
	if ($cross_compile_prefix)
 | 
			
		||||
		{
 | 
			
		||||
		s/^CC=.*$/CROSS_COMPILE= $cross_compile_prefix\nCC= \$\(CROSS_COMPILE\)$cc/;
 | 
			
		||||
		s/^AR=\s*/AR= \$\(CROSS_COMPILE\)/;
 | 
			
		||||
		s/^RANLIB=\s*/RANLIB= \$\(CROSS_COMPILE\)/;
 | 
			
		||||
		}
 | 
			
		||||
	else	{
 | 
			
		||||
		s/^CC=.*$/CC= $cc/;
 | 
			
		||||
		s/^RANLIB=.*/RANLIB= $ranlib/;
 | 
			
		||||
		}
 | 
			
		||||
	s/^MAKEDEPPROG=.*$/MAKEDEPPROG= $cc/ if $cc eq "gcc";
 | 
			
		||||
	s/^CFLAG=.*$/CFLAG= $cflags/;
 | 
			
		||||
	s/^DEPFLAG=.*$/DEPFLAG= $depflags/;
 | 
			
		||||
	s/^PEX_LIBS=.*$/PEX_LIBS= $prelflags/;
 | 
			
		||||
	s/^EX_LIBS=.*$/EX_LIBS= $lflags/;
 | 
			
		||||
	s/^EXE_EXT=.*$/EXE_EXT= $exe_ext/;
 | 
			
		||||
	s/^CPUID_OBJ=.*$/CPUID_OBJ= $cpuid_obj/;
 | 
			
		||||
@@ -1307,16 +1426,30 @@ while (<IN>)
 | 
			
		||||
	s/^SHA1_ASM_OBJ=.*$/SHA1_ASM_OBJ= $sha1_obj/;
 | 
			
		||||
	s/^RMD160_ASM_OBJ=.*$/RMD160_ASM_OBJ= $rmd160_obj/;
 | 
			
		||||
	s/^PROCESSOR=.*/PROCESSOR= $processor/;
 | 
			
		||||
	s/^RANLIB=.*/RANLIB= $ranlib/;
 | 
			
		||||
	s/^ARFLAGS=.*/ARFLAGS= $arflags/;
 | 
			
		||||
	s/^PERL=.*/PERL= $perl/;
 | 
			
		||||
	s/^KRB5_INCLUDES=.*/KRB5_INCLUDES=$withargs{"krb5-include"}/;
 | 
			
		||||
	s/^LIBKRB5=.*/LIBKRB5=$withargs{"krb5-lib"}/;
 | 
			
		||||
	s/^LIBZLIB=.*/LIBZLIB=$withargs{"zlib-lib"}/;
 | 
			
		||||
	s/^ZLIB_INCLUDE=.*/ZLIB_INCLUDE=$withargs{"zlib-include"}/;
 | 
			
		||||
	s/^FIPSLIBDIR=.*/FIPSLIBDIR=$fipslibdir/;
 | 
			
		||||
	if ($fipsdso)
 | 
			
		||||
		{
 | 
			
		||||
		s/^FIPSCANLIB=.*/FIPSCANLIB=libfips/;
 | 
			
		||||
		s/^SHARED_FIPS=.*/SHARED_FIPS=libfips\$(SHLIB_EXT)/;
 | 
			
		||||
		s/^SHLIBDIRS=.*/SHLIBDIRS= crypto ssl fips/;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		s/^FIPSCANLIB=.*/FIPSCANLIB=libcrypto/ if $fips;
 | 
			
		||||
		s/^SHARED_FIPS=.*/SHARED_FIPS=/;
 | 
			
		||||
		s/^SHLIBDIRS=.*/SHLIBDIRS= crypto ssl/;
 | 
			
		||||
		}
 | 
			
		||||
	s/^FIPSCANISTERINTERNAL=.*/FIPSCANISTERINTERNAL=$fipscanisterinternal/;
 | 
			
		||||
	s/^BASEADDR=.*/BASEADDR=$baseaddr/;
 | 
			
		||||
	s/^SHLIB_TARGET=.*/SHLIB_TARGET=$shared_target/;
 | 
			
		||||
	s/^SHLIB_MARK=.*/SHLIB_MARK=$shared_mark/;
 | 
			
		||||
	s/^SHARED_LIBS=.*/SHARED_LIBS=\$(SHARED_CRYPTO) \$(SHARED_SSL)/ if (!$no_shared);
 | 
			
		||||
	s/^SHARED_LIBS=.*/SHARED_LIBS=\$(SHARED_FIPS) \$(SHARED_CRYPTO) \$(SHARED_SSL)/ if (!$no_shared);
 | 
			
		||||
	if ($shared_extension ne "" && $shared_extension =~ /^\.s([ol])\.[^\.]*$/)
 | 
			
		||||
		{
 | 
			
		||||
		my $sotmp = $1;
 | 
			
		||||
@@ -1611,9 +1744,16 @@ BEGIN
 | 
			
		||||
    BEGIN
 | 
			
		||||
	BLOCK "040904b0"
 | 
			
		||||
	BEGIN
 | 
			
		||||
#if defined(FIPS)
 | 
			
		||||
	    VALUE "Comments", "WARNING: TEST VERSION ONLY ***NOT*** FIPS 140-2 VALIDATED.\\0"
 | 
			
		||||
#endif
 | 
			
		||||
	    // Required:	    
 | 
			
		||||
	    VALUE "CompanyName", "The OpenSSL Project, http://www.openssl.org/\\0"
 | 
			
		||||
#if defined(FIPS)
 | 
			
		||||
	    VALUE "FileDescription", "TEST UNVALIDATED FIPS140-2 DLL\\0"
 | 
			
		||||
#else
 | 
			
		||||
	    VALUE "FileDescription", "OpenSSL Shared Library\\0"
 | 
			
		||||
#endif
 | 
			
		||||
	    VALUE "FileVersion", "$version\\0"
 | 
			
		||||
#if defined(CRYPTO)
 | 
			
		||||
	    VALUE "InternalName", "libeay32\\0"
 | 
			
		||||
@@ -1621,12 +1761,15 @@ BEGIN
 | 
			
		||||
#elif defined(SSL)
 | 
			
		||||
	    VALUE "InternalName", "ssleay32\\0"
 | 
			
		||||
	    VALUE "OriginalFilename", "ssleay32.dll\\0"
 | 
			
		||||
#elif defined(FIPS)
 | 
			
		||||
	    VALUE "InternalName", "libosslfips\\0"
 | 
			
		||||
	    VALUE "OriginalFilename", "libosslfips.dll\\0"
 | 
			
		||||
#endif
 | 
			
		||||
	    VALUE "ProductName", "The OpenSSL Toolkit\\0"
 | 
			
		||||
	    VALUE "ProductVersion", "$version\\0"
 | 
			
		||||
	    // Optional:
 | 
			
		||||
	    //VALUE "Comments", "\\0"
 | 
			
		||||
	    VALUE "LegalCopyright", "Copyright <20> 1998-2005 The OpenSSL Project. Copyright <20> 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.\\0"
 | 
			
		||||
	    VALUE "LegalCopyright", "Copyright <20> 1998-2007 The OpenSSL Project. Copyright <20> 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.\\0"
 | 
			
		||||
	    //VALUE "LegalTrademarks", "\\0"
 | 
			
		||||
	    //VALUE "PrivateBuild", "\\0"
 | 
			
		||||
	    //VALUE "SpecialBuild", "\\0"
 | 
			
		||||
@@ -1663,6 +1806,21 @@ libraries on this platform, they will at least look at it and try their best
 | 
			
		||||
(but please first make sure you have tried with a current version of OpenSSL).
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
print <<\EOF if ($fipscanisterinternal eq "y");
 | 
			
		||||
 | 
			
		||||
WARNING: OpenSSL has been configured using unsupported option(s) to internally
 | 
			
		||||
generate a fipscanister.o object module for TESTING PURPOSES ONLY; that
 | 
			
		||||
compiled module is NOT FIPS 140-2 validated and CANNOT be used to replace the
 | 
			
		||||
OpenSSL FIPS Object Module as identified by the CMVP
 | 
			
		||||
(http://csrc.nist.gov/cryptval/) in any application requiring the use of FIPS
 | 
			
		||||
140-2 validated software. 
 | 
			
		||||
 | 
			
		||||
This is an OpenSSL 0.9.8-fips test version.
 | 
			
		||||
 | 
			
		||||
See the file README.FIPS for details of how to build a test library.
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
exit(0);
 | 
			
		||||
 | 
			
		||||
sub usage
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										169
									
								
								Makefile.org
									
									
									
									
									
								
							
							
						
						
									
										169
									
								
								Makefile.org
									
									
									
									
									
								
							@@ -65,6 +65,7 @@ EX_LIBS=
 | 
			
		||||
EXE_EXT= 
 | 
			
		||||
ARFLAGS=
 | 
			
		||||
AR=ar $(ARFLAGS) r
 | 
			
		||||
ARD=ar $(ARFLAGS) d
 | 
			
		||||
RANLIB= ranlib
 | 
			
		||||
PERL= perl
 | 
			
		||||
TAR= tar
 | 
			
		||||
@@ -104,14 +105,40 @@ LIBKRB5=
 | 
			
		||||
ZLIB_INCLUDE=
 | 
			
		||||
LIBZLIB=
 | 
			
		||||
 | 
			
		||||
DIRS=   crypto ssl engines apps test tools
 | 
			
		||||
SHLIBDIRS= crypto ssl
 | 
			
		||||
# This is the location of fipscanister.o and friends.
 | 
			
		||||
# The FIPS module build will place it $(INSTALLTOP)/lib
 | 
			
		||||
# but since $(INSTALLTOP) can only take the default value
 | 
			
		||||
# when the module is built it will be in /usr/local/ssl/lib
 | 
			
		||||
# $(INSTALLTOP) for this build make be different so hard
 | 
			
		||||
# code the path.
 | 
			
		||||
 | 
			
		||||
FIPSLIBDIR=/usr/local/ssl/lib/
 | 
			
		||||
 | 
			
		||||
# This is set to "y" if fipscanister.o is compiled internally as
 | 
			
		||||
# opposed to coming from an external validated location.
 | 
			
		||||
 | 
			
		||||
FIPSCANISTERINTERNAL=n
 | 
			
		||||
 | 
			
		||||
# The location of the library which contains fipscanister.o
 | 
			
		||||
# normally it will be libcrypto unless fipsdso is set in which
 | 
			
		||||
# case it will be libfips. If not compiling in FIPS mode at all
 | 
			
		||||
# this is empty making it a useful test for a FIPS compile.
 | 
			
		||||
 | 
			
		||||
FIPSCANLIB=
 | 
			
		||||
 | 
			
		||||
# Shared library base address. Currently only used on Windows.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
BASEADDR=
 | 
			
		||||
 | 
			
		||||
DIRS=   crypto fips ssl engines apps test tools
 | 
			
		||||
SHLIBDIRS= crypto ssl fips
 | 
			
		||||
 | 
			
		||||
# dirs in crypto to build
 | 
			
		||||
SDIRS=  \
 | 
			
		||||
	objects \
 | 
			
		||||
	md2 md4 md5 sha mdc2 hmac ripemd \
 | 
			
		||||
	des aes rc2 rc4 rc5 idea bf cast camellia \
 | 
			
		||||
	des aes rc2 rc4 rc5 idea bf cast camellia seed \
 | 
			
		||||
	bn ec rsa dsa ecdsa dh ecdh dso engine \
 | 
			
		||||
	buffer bio stack lhash rand err \
 | 
			
		||||
	evp asn1 pem x509 x509v3 conf txt_db pkcs7 pkcs12 comp ocsp ui krb5 \
 | 
			
		||||
@@ -138,13 +165,14 @@ WDIRS=  windows
 | 
			
		||||
LIBS=   libcrypto.a libssl.a
 | 
			
		||||
SHARED_CRYPTO=libcrypto$(SHLIB_EXT)
 | 
			
		||||
SHARED_SSL=libssl$(SHLIB_EXT)
 | 
			
		||||
SHARED_FIPS=
 | 
			
		||||
SHARED_LIBS=
 | 
			
		||||
SHARED_LIBS_LINK_EXTS=
 | 
			
		||||
SHARED_LDFLAGS=
 | 
			
		||||
 | 
			
		||||
GENERAL=        Makefile
 | 
			
		||||
BASENAME=       openssl
 | 
			
		||||
NAME=           $(BASENAME)-$(VERSION)
 | 
			
		||||
NAME=           $(BASENAME)-fips-$(VERSION)
 | 
			
		||||
TARFILE=        $(NAME).tar
 | 
			
		||||
WTARFILE=       $(NAME)-win.tar
 | 
			
		||||
EXHEADER=       e_os2.h
 | 
			
		||||
@@ -191,6 +219,9 @@ BUILDENV=	PLATFORM='${PLATFORM}' PROCESSOR='${PROCESSOR}' \
 | 
			
		||||
		SHA1_ASM_OBJ='${SHA1_ASM_OBJ}'			\
 | 
			
		||||
		MD5_ASM_OBJ='${MD5_ASM_OBJ}'			\
 | 
			
		||||
		RMD160_ASM_OBJ='${RMD160_ASM_OBJ}'		\
 | 
			
		||||
		FIPSLIBDIR='${FIPSLIBDIR}' FIPSCANLIB='${FIPSCANLIB}' \
 | 
			
		||||
		FIPSCANISTERINTERNAL='${FIPSCANISTERINTERNAL}'	\
 | 
			
		||||
		FIPS_EX_OBJ='${FIPS_EX_OBJ}'	\
 | 
			
		||||
		THIS=$${THIS:-$@} MAKEFILE=Makefile MAKEOVERRIDES=
 | 
			
		||||
# MAKEOVERRIDES= effectively "equalizes" GNU-ish and SysV-ish make flavors,
 | 
			
		||||
# which in turn eliminates ambiguities in variable treatment with -e.
 | 
			
		||||
@@ -222,13 +253,84 @@ BUILD_ONE_CMD=\
 | 
			
		||||
reflect:
 | 
			
		||||
	@[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
 | 
			
		||||
 | 
			
		||||
FIPS_EX_OBJ= ../crypto/aes/aes_cfb.o \
 | 
			
		||||
	../crypto/aes/aes_ecb.o \
 | 
			
		||||
	../crypto/aes/aes_ofb.o \
 | 
			
		||||
	../crypto/bn/bn_add.o \
 | 
			
		||||
	../crypto/bn/bn_blind.o \
 | 
			
		||||
	../crypto/bn/bn_ctx.o \
 | 
			
		||||
	../crypto/bn/bn_div.o \
 | 
			
		||||
	../crypto/bn/bn_exp2.o \
 | 
			
		||||
	../crypto/bn/bn_exp.o \
 | 
			
		||||
	../crypto/bn/bn_gcd.o \
 | 
			
		||||
	../crypto/bn/bn_lib.o \
 | 
			
		||||
	../crypto/bn/bn_mod.o \
 | 
			
		||||
	../crypto/bn/bn_mont.o \
 | 
			
		||||
	../crypto/bn/bn_mul.o \
 | 
			
		||||
	../crypto/bn/bn_prime.o \
 | 
			
		||||
	../crypto/bn/bn_rand.o \
 | 
			
		||||
	../crypto/bn/bn_recp.o \
 | 
			
		||||
	../crypto/bn/bn_shift.o \
 | 
			
		||||
	../crypto/bn/bn_sqr.o \
 | 
			
		||||
	../crypto/bn/bn_word.o \
 | 
			
		||||
	../crypto/bn/bn_x931p.o \
 | 
			
		||||
	../crypto/buffer/buf_str.o \
 | 
			
		||||
	../crypto/cryptlib.o \
 | 
			
		||||
	../crypto/des/cfb64ede.o \
 | 
			
		||||
	../crypto/des/cfb64enc.o \
 | 
			
		||||
	../crypto/des/cfb_enc.o \
 | 
			
		||||
	../crypto/des/ecb3_enc.o \
 | 
			
		||||
	../crypto/des/ecb_enc.o \
 | 
			
		||||
	../crypto/des/ofb64ede.o \
 | 
			
		||||
	../crypto/des/ofb64enc.o \
 | 
			
		||||
	../crypto/des/fcrypt.o \
 | 
			
		||||
	../crypto/des/set_key.o \
 | 
			
		||||
	../crypto/dsa/dsa_utl.o \
 | 
			
		||||
	../crypto/dsa/dsa_sign.o \
 | 
			
		||||
	../crypto/dsa/dsa_vrf.o \
 | 
			
		||||
	../crypto/err/err.o \
 | 
			
		||||
	../crypto/evp/digest.o \
 | 
			
		||||
	../crypto/evp/enc_min.o \
 | 
			
		||||
	../crypto/evp/e_aes.o \
 | 
			
		||||
	../crypto/evp/e_des3.o \
 | 
			
		||||
	../crypto/evp/p_sign.o \
 | 
			
		||||
	../crypto/evp/p_verify.o \
 | 
			
		||||
	../crypto/mem_clr.o \
 | 
			
		||||
	../crypto/mem.o \
 | 
			
		||||
	../crypto/rand/md_rand.o \
 | 
			
		||||
	../crypto/rand/rand_egd.o \
 | 
			
		||||
	../crypto/rand/randfile.o \
 | 
			
		||||
	../crypto/rand/rand_lib.o \
 | 
			
		||||
	../crypto/rand/rand_os2.o \
 | 
			
		||||
	../crypto/rand/rand_unix.o \
 | 
			
		||||
	../crypto/rand/rand_win.o \
 | 
			
		||||
	../crypto/rsa/rsa_lib.o \
 | 
			
		||||
	../crypto/rsa/rsa_none.o \
 | 
			
		||||
	../crypto/rsa/rsa_oaep.o \
 | 
			
		||||
	../crypto/rsa/rsa_pk1.o \
 | 
			
		||||
	../crypto/rsa/rsa_pss.o \
 | 
			
		||||
	../crypto/rsa/rsa_ssl.o \
 | 
			
		||||
	../crypto/rsa/rsa_x931.o \
 | 
			
		||||
	../crypto/sha/sha1dgst.o \
 | 
			
		||||
	../crypto/sha/sha256.o \
 | 
			
		||||
	../crypto/sha/sha512.o \
 | 
			
		||||
	../crypto/uid.o
 | 
			
		||||
 | 
			
		||||
sub_all: build_all
 | 
			
		||||
build_all: build_libs build_apps build_tests build_tools
 | 
			
		||||
 | 
			
		||||
build_libs: build_crypto build_ssl build_engines
 | 
			
		||||
build_libs: build_crypto build_fips build_ssl build_shared build_engines
 | 
			
		||||
 | 
			
		||||
build_crypto:
 | 
			
		||||
	@dir=crypto; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
	if [ -n "$(FIPSCANLIB)" ]; then \
 | 
			
		||||
		EXCL_OBJ='$(AES_ASM_OBJ) $(BN_ASM) $(DES_ENC) $(CPUID_OBJ) $(SHA1_ASM_OBJ) $(FIPS_EX_OBJ)' ; export EXCL_OBJ ; \
 | 
			
		||||
		ARX='$(PERL) $${TOP}/util/arx.pl $(AR)' ; \
 | 
			
		||||
	else \
 | 
			
		||||
		ARX='${AR}' ; \
 | 
			
		||||
	fi ; export ARX ; \
 | 
			
		||||
		dir=crypto; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_fips:
 | 
			
		||||
	@dir=fips; target=all; [ -z "$(FIPSCANLIB)" ] || $(BUILD_ONE_CMD)
 | 
			
		||||
build_ssl:
 | 
			
		||||
	@dir=ssl; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_engines:
 | 
			
		||||
@@ -244,9 +346,20 @@ all_testapps: build_libs build_testapps
 | 
			
		||||
build_testapps:
 | 
			
		||||
	@dir=crypto; target=testapps; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a
 | 
			
		||||
build_shared:	$(SHARED_LIBS)
 | 
			
		||||
libcrypto$(SHLIB_EXT): libcrypto.a $(SHARED_FIPS)
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		$(MAKE) SHLIBDIRS=crypto build-shared; \
 | 
			
		||||
		if [ "$(FIPSCANLIB)" = "libfips" ]; then \
 | 
			
		||||
			$(ARD) libcrypto.a fipscanister.o ; \
 | 
			
		||||
			$(MAKE) SHLIBDIRS='crypto' SHLIBDEPS='-lfips' build-shared; \
 | 
			
		||||
			$(AR) libcrypto.a fips/fipscanister.o ; \
 | 
			
		||||
		else \
 | 
			
		||||
			if [ "$(FIPSCANLIB)" = "libcrypto" ]; then \
 | 
			
		||||
				FIPSLD_CC=$(CC); CC=fips/fipsld; \
 | 
			
		||||
				export CC FIPSLD_CC; \
 | 
			
		||||
			fi; \
 | 
			
		||||
			$(MAKE) -e SHLIBDIRS='crypto' build-shared; \
 | 
			
		||||
		fi \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
			
		||||
		exit 1; \
 | 
			
		||||
@@ -254,12 +367,32 @@ libcrypto$(SHLIB_EXT): libcrypto.a
 | 
			
		||||
 | 
			
		||||
libssl$(SHLIB_EXT): libcrypto$(SHLIB_EXT) libssl.a
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		$(MAKE) SHLIBDIRS=ssl SHLIBDEPS='-lcrypto' build-shared; \
 | 
			
		||||
		shlibdeps=-lcrypto; \
 | 
			
		||||
		[ "$(FIPSCANLIB)" = "libfips" ] && shlibdeps="$$shlibdeps -lfips"; \
 | 
			
		||||
		$(MAKE) SHLIBDIRS=ssl SHLIBDEPS="$$shlibdeps" build-shared; \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2 ; \
 | 
			
		||||
		exit 1; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
fips/fipscanister.o:	build_fips
 | 
			
		||||
libfips$(SHLIB_EXT):		fips/fipscanister.o
 | 
			
		||||
	@if [ "$(SHLIB_TARGET)" != "" ]; then \
 | 
			
		||||
		FIPSLD_CC=$(CC); CC=fips/fipsld; export CC FIPSLD_CC; \
 | 
			
		||||
		$(MAKE) -f Makefile.shared -e $(BUILDENV) \
 | 
			
		||||
			CC=$${CC} LIBNAME=fips THIS=$@ \
 | 
			
		||||
			LIBEXTRAS=fips/fipscanister.o \
 | 
			
		||||
			LIBDEPS="$(EX_LIBS)" \
 | 
			
		||||
			LIBVERSION=${SHLIB_MAJOR}.${SHLIB_MINOR} \
 | 
			
		||||
			link_o.$(SHLIB_TARGET) || { rm -f $@; exit 1; } \
 | 
			
		||||
	else \
 | 
			
		||||
		echo "There's no support for shared libraries on this platform" >&2; \
 | 
			
		||||
		exit 1; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
libfips.a:
 | 
			
		||||
	dir=fips; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
clean-shared:
 | 
			
		||||
	@set -e; for i in $(SHLIBDIRS); do \
 | 
			
		||||
		if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \
 | 
			
		||||
@@ -379,12 +512,14 @@ dclean:
 | 
			
		||||
	@set -e; target=dclean; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
rehash: rehash.time
 | 
			
		||||
rehash.time: certs
 | 
			
		||||
	@(OPENSSL="`pwd`/util/opensslwrap.sh"; \
 | 
			
		||||
	  OPENSSL_DEBUG_MEMORY=on; \
 | 
			
		||||
	  export OPENSSL OPENSSL_DEBUG_MEMORY; \
 | 
			
		||||
	  $(PERL) tools/c_rehash certs)
 | 
			
		||||
	touch rehash.time
 | 
			
		||||
rehash.time: certs apps
 | 
			
		||||
	@if [ -z "$(CROSS_COMPILE)" ]; then \
 | 
			
		||||
		(OPENSSL="`pwd`/util/opensslwrap.sh"; \
 | 
			
		||||
		OPENSSL_DEBUG_MEMORY=on; \
 | 
			
		||||
		export OPENSSL OPENSSL_DEBUG_MEMORY; \
 | 
			
		||||
		$(PERL) tools/c_rehash certs) && \
 | 
			
		||||
		touch rehash.time; \
 | 
			
		||||
	else :; fi
 | 
			
		||||
 | 
			
		||||
test:   tests
 | 
			
		||||
 | 
			
		||||
@@ -451,7 +586,7 @@ tar:
 | 
			
		||||
	$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
 | 
			
		||||
	tardy --user_number=0  --user_name=openssl \
 | 
			
		||||
	      --group_number=0 --group_name=openssl \
 | 
			
		||||
	      --prefix=openssl-$(VERSION) - |\
 | 
			
		||||
	      --prefix=openssl-fips-$(VERSION) - |\
 | 
			
		||||
	gzip --best >../$(TARFILE).gz; \
 | 
			
		||||
	rm -f ../$(TARFILE).list; \
 | 
			
		||||
	ls -l ../$(TARFILE).gz
 | 
			
		||||
@@ -473,7 +608,7 @@ dist:
 | 
			
		||||
dist_pem_h:
 | 
			
		||||
	(cd crypto/pem; $(MAKE) -e $(BUILDENV) pem.h; $(MAKE) clean)
 | 
			
		||||
 | 
			
		||||
install: all install_docs install_sw
 | 
			
		||||
install: all install_sw
 | 
			
		||||
 | 
			
		||||
install_sw:
 | 
			
		||||
	@$(PERL) $(TOP)/util/mkdir-p.pl $(INSTALL_PREFIX)$(INSTALLTOP)/bin \
 | 
			
		||||
 
 | 
			
		||||
@@ -101,15 +101,13 @@ LINK_SO=	\
 | 
			
		||||
    LIBDEPS="$${LIBDEPS:-$(LIBDEPS)}"; \
 | 
			
		||||
    SHAREDCMD="$${SHAREDCMD:-$(CC)}"; \
 | 
			
		||||
    SHAREDFLAGS="$${SHAREDFLAGS:-$(CFLAGS) $(SHARED_LDFLAGS)}"; \
 | 
			
		||||
    nm -Pg $$SHOBJECTS | grep ' [BDT] ' | cut -f1 -d' ' > lib$(LIBNAME).exp; \
 | 
			
		||||
    LIBPATH=`for x in $$LIBDEPS; do if echo $$x | grep '^ *-L' > /dev/null 2>&1; then echo $$x | sed -e 's/^ *-L//'; fi; done | uniq`; \
 | 
			
		||||
    LIBPATH=`echo $$LIBPATH | sed -e 's/ /:/g'`; \
 | 
			
		||||
    LD_LIBRARY_PATH=$$LIBPATH:$$LD_LIBRARY_PATH \
 | 
			
		||||
    $${SHAREDCMD} $${SHAREDFLAGS} \
 | 
			
		||||
	-o $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX \
 | 
			
		||||
	$$ALLSYMSFLAGS $$SHOBJECTS $$NOALLSYMSFLAGS $$LIBDEPS \
 | 
			
		||||
  ) && $(SYMLINK_SO); \
 | 
			
		||||
  ( $(SET_X); rm -f lib$(LIBNAME).exp )
 | 
			
		||||
  ) && $(SYMLINK_SO)
 | 
			
		||||
 | 
			
		||||
SYMLINK_SO=	\
 | 
			
		||||
	if [ -n "$$INHIBIT_SYMLINKS" ]; then :; else \
 | 
			
		||||
@@ -202,8 +200,10 @@ link_app.bsd:
 | 
			
		||||
# to use native NSModule(3) API and refers to dlfcn as termporary hack.
 | 
			
		||||
link_o.darwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	SHLIB=lib$(LIBNAME); \
 | 
			
		||||
	SHLIB_SUFFIX=.so; \
 | 
			
		||||
	SHLIB=`expr "$$THIS" : '.*/\([^/\.]*\)\.'`; \
 | 
			
		||||
	SHLIB=$${SHLIB:-lib$(LIBNAME)}; \
 | 
			
		||||
	SHLIB_SUFFIX=`expr "$$THIS" : '.*\(\.[^\.]*\)$$'`; \
 | 
			
		||||
	SHLIB_SUFFIX=$${SHLIB_SUFFIX:-.so}; \
 | 
			
		||||
	ALLSYMSFLAGS='-all_load'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS)"; \
 | 
			
		||||
@@ -236,24 +236,30 @@ link_o.cygwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	INHIBIT_SYMLINKS=yes; \
 | 
			
		||||
	SHLIB=cyg$(LIBNAME); \
 | 
			
		||||
	expr $(PLATFORM) : 'mingw' > /dev/null && SHLIB=$(LIBNAME)eay32; \
 | 
			
		||||
	base=-Wl,--enable-auto-image-base; \
 | 
			
		||||
	if expr $(PLATFORM) : 'mingw' > /dev/null; then \
 | 
			
		||||
		SHLIB=$(LIBNAME)eay32; base=; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	SHLIB_SUFFIX=.dll; \
 | 
			
		||||
	LIBVERSION="$(LIBVERSION)"; \
 | 
			
		||||
	SHLIB_SOVER=${LIBVERSION:+"-$(LIBVERSION)"}; \
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,--whole-archive'; \
 | 
			
		||||
	NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.cygwin:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	INHIBIT_SYMLINKS=yes; \
 | 
			
		||||
	SHLIB=cyg$(LIBNAME); \
 | 
			
		||||
	expr $(PLATFORM) : 'mingw' > /dev/null && SHLIB=$(LIBNAME)eay32; \
 | 
			
		||||
	base=-Wl,--enable-auto-image-base; \
 | 
			
		||||
	if expr $(PLATFORM) : 'mingw' > /dev/null; then \
 | 
			
		||||
		SHLIB=$(LIBNAME)eay32; \
 | 
			
		||||
		base=;  [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	SHLIB_SUFFIX=.dll; \
 | 
			
		||||
	SHLIB_SOVER=-$(LIBVERSION); \
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,--whole-archive'; \
 | 
			
		||||
	NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \
 | 
			
		||||
	base=;  [ $(LIBNAME) = "crypto" ] && base=-Wl,--image-base,0x63000000; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared $$base -Wl,-Bsymbolic -Wl,--out-implib,lib$(LIBNAME).dll.a"; \
 | 
			
		||||
	[ -f apps/$$SHLIB$$SHLIB_SUFFIX ] && rm apps/$$SHLIB$$SHLIB_SUFFIX; \
 | 
			
		||||
	[ -f test/$$SHLIB$$SHLIB_SUFFIX ] && rm test/$$SHLIB$$SHLIB_SUFFIX; \
 | 
			
		||||
@@ -278,7 +284,7 @@ link_o.alpha-osf1:
 | 
			
		||||
		SHLIB_SOVER=; \
 | 
			
		||||
		ALLSYMSFLAGS='-all'; \
 | 
			
		||||
		NOALLSYMSFLAGS='-none'; \
 | 
			
		||||
		SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared"; \
 | 
			
		||||
		SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-B,symbolic"; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$$SHAREDFLAGS -set_version $$SHLIB_HIST"; \
 | 
			
		||||
		fi; \
 | 
			
		||||
@@ -299,7 +305,7 @@ link_a.alpha-osf1:
 | 
			
		||||
		SHLIB_SOVER=; \
 | 
			
		||||
		ALLSYMSFLAGS='-all'; \
 | 
			
		||||
		NOALLSYMSFLAGS='-none'; \
 | 
			
		||||
		SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared"; \
 | 
			
		||||
		SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-B,symbolic"; \
 | 
			
		||||
		if [ -n "$$SHLIB_HIST" ]; then \
 | 
			
		||||
			SHAREDFLAGS="$$SHAREDFLAGS -set_version $$SHLIB_HIST"; \
 | 
			
		||||
		fi; \
 | 
			
		||||
@@ -422,7 +428,7 @@ link_o.irix:
 | 
			
		||||
		($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \
 | 
			
		||||
		ALLSYMSFLAGS="$${MINUSWL}-all"; \
 | 
			
		||||
		NOALLSYMSFLAGS="$${MINUSWL}-none"; \
 | 
			
		||||
		SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
 | 
			
		||||
		SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,-B,symbolic"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_O)
 | 
			
		||||
link_a.irix:
 | 
			
		||||
@@ -436,7 +442,7 @@ link_a.irix:
 | 
			
		||||
		($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \
 | 
			
		||||
		ALLSYMSFLAGS="$${MINUSWL}-all"; \
 | 
			
		||||
		NOALLSYMSFLAGS="$${MINUSWL}-none"; \
 | 
			
		||||
		SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
 | 
			
		||||
		SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,-B,symbolic"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	$(LINK_SO_A)
 | 
			
		||||
link_app.irix:
 | 
			
		||||
@@ -460,7 +466,7 @@ link_o.hpux:
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,-Fl'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,+cdp,../:,+cdp,./:"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \
 | 
			
		||||
	$(LINK_SO_O) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
 | 
			
		||||
@@ -473,7 +479,7 @@ link_a.hpux:
 | 
			
		||||
	ALLSYMSFLAGS='-Wl,-Fl'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	expr $(PLATFORM) : 'hpux64' > /dev/null && ALLSYMSFLAGS='-Wl,+forceload'; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX"; \
 | 
			
		||||
	SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-B,symbolic,+vnocompatwarnings,-z,+s,+h,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX,+cdp,../:,+cdp,./:"; \
 | 
			
		||||
	fi; \
 | 
			
		||||
	rm -f $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX || :; \
 | 
			
		||||
	$(LINK_SO_A) && chmod a=rx $$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX
 | 
			
		||||
@@ -485,26 +491,26 @@ link_app.hpux:
 | 
			
		||||
 | 
			
		||||
link_o.aix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	OBJECT_MODE=`expr x$(SHARED_LDFLAGS) : 'x\-[a-z]\([0-9]*\)'`; \
 | 
			
		||||
	OBJECT_MODE=`expr x$(SHARED_LDFLAGS) : 'x\-[a-z]*\(64\)'` || :; \
 | 
			
		||||
	OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	ALLSYMSFLAGS='-bnogc'; \
 | 
			
		||||
	ALLSYMSFLAGS=''; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -G -bE:lib$(LIBNAME).exp -bM:SRE'; \
 | 
			
		||||
	$(LINK_SO_O); rm -rf lib$(LIBNAME).exp
 | 
			
		||||
	SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-G,-bexpall,-bnolibpath,-bM:SRE'; \
 | 
			
		||||
	$(LINK_SO_O);
 | 
			
		||||
link_a.aix:
 | 
			
		||||
	@ $(CALC_VERSIONS); \
 | 
			
		||||
	OBJECT_MODE=`expr x$(SHARED_LDFLAGS) : 'x\-[a-z]\([0-9]*\)'`; \
 | 
			
		||||
	OBJECT_MODE=`expr x$(SHARED_LDFLAGS) : 'x\-[a-z]*\(64\)'` || : ; \
 | 
			
		||||
	OBJECT_MODE=$${OBJECT_MODE:-32}; export OBJECT_MODE; \
 | 
			
		||||
	SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
	SHLIB_SUFFIX=; \
 | 
			
		||||
	ALLSYMSFLAGS='-bnogc'; \
 | 
			
		||||
	NOALLSYMSFLAGS=''; \
 | 
			
		||||
	SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -G -bE:lib$(LIBNAME).exp -bM:SRE'; \
 | 
			
		||||
	SHAREDFLAGS='$(CFLAGS) $(SHARED_LDFLAGS) -Wl,-G,-bexpall,-bnolibpath,-bM:SRE'; \
 | 
			
		||||
	$(LINK_SO_A_VIA_O)
 | 
			
		||||
link_app.aix:
 | 
			
		||||
	LDFLAGS="$(CFLAGS) -blibpath:$(LIBRPATH):$${LIBPATH:-/usr/lib:/lib}"; \
 | 
			
		||||
	LDFLAGS="$(CFLAGS) -Wl,-brtl,-blibpath:$(LIBRPATH):$${LIBPATH:-/usr/lib:/lib}"; \
 | 
			
		||||
	$(LINK_APP)
 | 
			
		||||
 | 
			
		||||
link_o.reliantunix:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								README
									
									
									
									
									
								
							@@ -1,10 +1,16 @@
 | 
			
		||||
 | 
			
		||||
 OpenSSL 0.9.8f-dev
 | 
			
		||||
 OpenSSL 0.9.8f-fips-dev test version
 | 
			
		||||
 | 
			
		||||
 Copyright (c) 1998-2007 The OpenSSL Project
 | 
			
		||||
 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
 | 
			
		||||
 All rights reserved.
 | 
			
		||||
 | 
			
		||||
 WARNING
 | 
			
		||||
 -------
 | 
			
		||||
 | 
			
		||||
 This version of OpenSSL is an initial port of the FIPS 140-2 code to OpenSSL
 | 
			
		||||
 0.9.8. See the file README.FIPS for brief usage details.
 | 
			
		||||
 | 
			
		||||
 DESCRIPTION
 | 
			
		||||
 -----------
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								README.FIPS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								README.FIPS
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
 | 
			
		||||
Brief instructions on using OpenSSL 0.9.8 FIPS test branch.
 | 
			
		||||
 | 
			
		||||
To avoid any confusion that this might generate a validate library just
 | 
			
		||||
supplying "fips" on the command line wont work. Additional options are
 | 
			
		||||
needed...
 | 
			
		||||
 | 
			
		||||
To build fipscanister and produce a usable distribution the configuration
 | 
			
		||||
option "fipscanisterbuild" is used to either the config or Configure scripts.
 | 
			
		||||
For example:
 | 
			
		||||
 | 
			
		||||
./config fipscanisterbuild
 | 
			
		||||
 | 
			
		||||
This builds static libraries in a way similar to the FIPS 1.1.1 distro.
 | 
			
		||||
 | 
			
		||||
To build the shared library fipscanister version use the configuration
 | 
			
		||||
options "fipsdso".
 | 
			
		||||
 | 
			
		||||
Note that the fipscanister.o file is totally incompatible with the version
 | 
			
		||||
produced by the FIPS 1.1.1 distribution and cannot be made to work with
 | 
			
		||||
it.
 | 
			
		||||
 | 
			
		||||
Both options should also work under Windows and VC++. With this version the
 | 
			
		||||
use of MinGW is unnecessary and the normal VC++ build procedure can be
 | 
			
		||||
followed *except* the GNU linker "ld.exe" (for example from MinGW) must be
 | 
			
		||||
accessible somewhere on the PATH. For example:
 | 
			
		||||
 | 
			
		||||
perl Configure VC-WIN32 fipsdso
 | 
			
		||||
ms\do_masm
 | 
			
		||||
nmake -f ms\ntdll.mak
 | 
			
		||||
 | 
			
		||||
Note that any warnings from a Windows version of "tar" about being unable to
 | 
			
		||||
create symbolic links can be ignored.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										289
									
								
								TABLE
									
									
									
									
									
								
							
							
						
						
									
										289
									
								
								TABLE
									
									
									
									
									
								
							@@ -117,14 +117,14 @@ $sys_id       =
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-ia64.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = aes_core.o aes_cbc.o aes-ia64.o
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = sha1-ia64.o sha256-ia64.o sha512-ia64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-ia64.o
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
@@ -145,10 +145,10 @@ $lflags       =
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC2_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC2 BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-sparcv9.o
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
@@ -171,8 +171,8 @@ $sys_id       =
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = sparcv8.o
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
@@ -198,7 +198,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-out.o
 | 
			
		||||
$bn_obj       = bn86-out.o co86-out.o
 | 
			
		||||
$bn_obj       = bn86-out.o co86-out.o mo86-out.o
 | 
			
		||||
$des_obj      = dx86-out.o yx86-out.o
 | 
			
		||||
$aes_obj      = ax86-out.o
 | 
			
		||||
$bf_obj       = bx86-out.o
 | 
			
		||||
@@ -225,7 +225,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -252,12 +252,12 @@ $sys_id       =
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$aes_obj      = aes-x86_64.o
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-x86_64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$sha1_obj     = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-x86_64.o
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
@@ -279,7 +279,7 @@ $sys_id       = CYGWIN32
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-cof.o
 | 
			
		||||
$bn_obj       = bn86-cof.o co86-cof.o
 | 
			
		||||
$bn_obj       = bn86-cof.o co86-cof.o mo86-cof.o
 | 
			
		||||
$des_obj      = dx86-cof.o yx86-cof.o
 | 
			
		||||
$aes_obj      = ax86-cof.o
 | 
			
		||||
$bf_obj       = bx86-cof.o
 | 
			
		||||
@@ -333,7 +333,7 @@ $sys_id       = MSDOS
 | 
			
		||||
$lflags       = -L/dev/env/WATT_ROOT/lib -lwatt
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-out.o
 | 
			
		||||
$bn_obj       = bn86-out.o co86-out.o
 | 
			
		||||
$bn_obj       = bn86-out.o co86-out.o mo86-out.o
 | 
			
		||||
$des_obj      = dx86-out.o yx86-out.o
 | 
			
		||||
$aes_obj      = ax86-out.o
 | 
			
		||||
$bf_obj       = bx86-out.o
 | 
			
		||||
@@ -677,14 +677,14 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** aix-cc
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -q32 -O -DB_ENDIAN -qmaxmem=16384
 | 
			
		||||
$cflags       = -q32 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -qthreaded
 | 
			
		||||
$sys_id       = AIX
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = aix_ppc32.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -711,7 +711,7 @@ $sys_id       = AIX
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = aix_ppc32.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -722,12 +722,12 @@ $rc4_obj      =
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= 
 | 
			
		||||
$shared_target= aix-shared
 | 
			
		||||
$shared_cflag = 
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = 
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
$arflags      = -X 32
 | 
			
		||||
 | 
			
		||||
*** aix3-cc
 | 
			
		||||
$cc           = cc
 | 
			
		||||
@@ -758,14 +758,14 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** aix64-cc
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -q64 -O -DB_ENDIAN -qmaxmem=16384
 | 
			
		||||
$cflags       = -q64 -O -DB_ENDIAN -qmaxmem=16384 -qro -qroconst
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -qthreaded
 | 
			
		||||
$sys_id       = AIX
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = aix_ppc64.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -792,7 +792,7 @@ $sys_id       = AIX
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = aix_ppc64.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -803,10 +803,10 @@ $rc4_obj      =
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= 
 | 
			
		||||
$shared_target= aix-shared
 | 
			
		||||
$shared_cflag = 
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = 
 | 
			
		||||
$shared_ldflag = -maix64
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = -X64
 | 
			
		||||
 | 
			
		||||
@@ -846,7 +846,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -951,7 +951,7 @@ $cflags       = -O3 -fomit-frame-pointer -fno-common
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = MACOSX
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$lflags       = -Wl,-search_paths_first%
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
@@ -978,10 +978,10 @@ $cflags       = -O3 -DB_ENDIAN
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = MACOSX
 | 
			
		||||
$lflags       = -Wl,-search_paths_first
 | 
			
		||||
$lflags       = -Wl,-search_paths_first%
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = osx_ppc32.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -1035,7 +1035,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -1224,7 +1224,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -1251,7 +1251,7 @@ $sys_id       = MACOSX
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = osx_ppc32.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -1305,7 +1305,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -1332,7 +1332,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -1413,7 +1413,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lefence -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -1440,7 +1440,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -1467,7 +1467,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -1494,7 +1494,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -1521,7 +1521,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -1548,7 +1548,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = sparcv8.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -1575,7 +1575,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = sparcv8.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -1602,11 +1602,11 @@ $sys_id       = ULTRASPARC
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = sparcv8plus.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-sparcv8plus.o
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
@@ -1629,11 +1629,11 @@ $sys_id       = ULTRASPARC
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = sparcv8plus.o
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-sparcv8plus.o
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
@@ -1649,14 +1649,14 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** debug-steve
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -march=i486 -pedantic -Wno-long-long -Wall -Werror -Wshadow -pipe
 | 
			
		||||
$cflags       = -DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -m32 -pedantic -Wno-long-long -Wall -Werror -Wshadow -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -rdynamic -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -1818,7 +1818,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lnsl -lsocket
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -1953,14 +1953,14 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-ia64.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = aes_core.o aes_cbc.o aes-ia64.o
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = sha1-ia64.o sha256-ia64.o sha512-ia64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-ia64.o
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
@@ -1980,14 +1980,14 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-ia64.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = aes_core.o aes_cbc.o aes-ia64.o
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = sha1-ia64.o sha256-ia64.o sha512-ia64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-ia64.o
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
@@ -2115,7 +2115,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -Wl,+s -ldld
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = pa-risc2.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -2142,7 +2142,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -Wl,+s -ldld
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = pa-risc2.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -2169,14 +2169,14 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-ia64.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = aes_core.o aes_cbc.o aes-ia64.o
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = sha1-ia64.o sha256-ia64.o sha512-ia64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-ia64.o
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
@@ -2196,14 +2196,14 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX DES_UNROLL DES_RISC1 DES_INT
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-ia64.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = aes_core.o aes_cbc.o aes-ia64.o
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = sha1-ia64.o sha256-ia64.o sha512-ia64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-ia64.o
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
@@ -2223,7 +2223,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = pa-risc2W.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -2250,7 +2250,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = pa-risc2W.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -2277,7 +2277,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -2351,14 +2351,14 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** irix-mips3-cc
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -n32 -mips3 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$cflags       = -n32 -mips3 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_SGI_MP_SOURCE
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-mips3.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -2385,7 +2385,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK_LL DES_UNROLL DES_RISC2 DES_PTR BF_PTR SIXTY_FOUR_BIT
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-mips3.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -2405,14 +2405,14 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** irix64-mips4-cc
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -64 -mips4 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$cflags       = -64 -mips4 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_SGI_MP_SOURCE
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-mips3.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -2439,7 +2439,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-mips3.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -2574,7 +2574,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = 
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-out.o
 | 
			
		||||
$bn_obj       = bn86-out.o co86-out.o
 | 
			
		||||
$bn_obj       = bn86-out.o co86-out.o mo86-out.o
 | 
			
		||||
$des_obj      = dx86-out.o yx86-out.o
 | 
			
		||||
$aes_obj      = ax86-out.o
 | 
			
		||||
$bf_obj       = bx86-out.o
 | 
			
		||||
@@ -2601,7 +2601,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -2682,7 +2682,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -2709,14 +2709,14 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-ia64.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = aes_core.o aes_cbc.o aes-ia64.o
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = sha1-ia64.o sha256-ia64.o sha512-ia64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-ia64.o
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
@@ -2736,14 +2736,14 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-ia64.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = aes_core.o aes_cbc.o aes-ia64.o
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = sha1-ia64.o sha256-ia64.o sha512-ia64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-ia64.o
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
@@ -2763,14 +2763,14 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = bn-ia64.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = aes_core.o aes_cbc.o aes-ia64.o
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = sha1-ia64.o sha256-ia64.o sha512-ia64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-ia64.o
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
@@ -2790,7 +2790,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = linux_ppc32.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -2817,7 +2817,34 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = linux_ppc64.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= linux-shared
 | 
			
		||||
$shared_cflag = -fPIC
 | 
			
		||||
$shared_ldflag = -m64
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** linux-s390x
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -m64 -DB_ENDIAN -DTERMIO -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
@@ -2844,8 +2871,8 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = sparcv8.o
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
@@ -2871,11 +2898,11 @@ $sys_id       = ULTRASPARC
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = sparcv8plus.o
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-sparcv8plus.o
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
@@ -2898,12 +2925,12 @@ $sys_id       =
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$aes_obj      = aes-x86_64.o
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-x86_64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$sha1_obj     = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-x86_64.o
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
@@ -2926,10 +2953,10 @@ $lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-sparcv9.o
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
@@ -2952,7 +2979,7 @@ $sys_id       = MINGW32
 | 
			
		||||
$lflags       = -lwsock32 -lgdi32
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT EXPORT_VAR_AS_FN
 | 
			
		||||
$cpuid_obj    = x86cpuid-cof.o
 | 
			
		||||
$bn_obj       = bn86-cof.o co86-cof.o
 | 
			
		||||
$bn_obj       = bn86-cof.o co86-cof.o mo86-cof.o
 | 
			
		||||
$des_obj      = dx86-cof.o yx86-cof.o
 | 
			
		||||
$aes_obj      = ax86-cof.o
 | 
			
		||||
$bf_obj       = bx86-cof.o
 | 
			
		||||
@@ -3357,7 +3384,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lsocket -lnsl
 | 
			
		||||
$bn_ops       = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -3384,7 +3411,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lsocket -lnsl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -3465,8 +3492,8 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = sparcv8.o
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
@@ -3492,8 +3519,8 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = sparcv8.o
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
@@ -3519,11 +3546,11 @@ $sys_id       = ULTRASPARC
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK_LL DES_PTR DES_RISC1 DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = sparcv8plus.o
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-sparcv8plus.o
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
@@ -3546,11 +3573,11 @@ $sys_id       = ULTRASPARC
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = sparcv8plus.o
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-sparcv8plus.o
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
@@ -3600,7 +3627,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -3628,10 +3655,10 @@ $lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-sparcv9.o
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
@@ -3655,10 +3682,10 @@ $lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR
 | 
			
		||||
$cpuid_obj    = 
 | 
			
		||||
$bn_obj       = 
 | 
			
		||||
$des_obj      = des_enc-sparc.o fcrypt_b.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-sparcv9.o
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
@@ -3681,12 +3708,12 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$aes_obj      = aes-x86_64.o
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-x86_64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$sha1_obj     = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-x86_64.o
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
@@ -3708,12 +3735,12 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lsocket -lnsl -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG RC4_CHUNK BF_PTR2 DES_INT DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86_64cpuid.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o
 | 
			
		||||
$bn_obj       = x86_64-gcc.o x86_64-mont.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$aes_obj      = 
 | 
			
		||||
$aes_obj      = aes-x86_64.o
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = md5-x86_64.o
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$sha1_obj     = sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = rc4-x86_64.o
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
@@ -3924,7 +3951,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lsocket -lnsl
 | 
			
		||||
$bn_ops       = BN_LLONG MD2_CHAR RC4_INDEX DES_PTR DES_RISC1 DES_UNROLL
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
@@ -3951,7 +3978,7 @@ $sys_id       =
 | 
			
		||||
$lflags       = -lsocket -lnsl
 | 
			
		||||
$bn_ops       = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT
 | 
			
		||||
$cpuid_obj    = x86cpuid-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o
 | 
			
		||||
$bn_obj       = bn86-elf.o co86-elf.o mo86-elf.o
 | 
			
		||||
$des_obj      = dx86-elf.o yx86-elf.o
 | 
			
		||||
$aes_obj      = ax86-elf.o
 | 
			
		||||
$bf_obj       = bx86-elf.o
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										930
									
								
								apps/Makefile
									
									
									
									
									
								
							
							
						
						
									
										930
									
								
								apps/Makefile
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -146,9 +146,11 @@ int WIN32_rename(const char *oldname,const char *newname);
 | 
			
		||||
#ifndef NON_MAIN
 | 
			
		||||
CONF *config=NULL;
 | 
			
		||||
BIO *bio_err=NULL;
 | 
			
		||||
int in_FIPS_mode=0;
 | 
			
		||||
#else
 | 
			
		||||
extern CONF *config;
 | 
			
		||||
extern BIO *bio_err;
 | 
			
		||||
extern int in_FIPS_mode;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
@@ -157,6 +159,7 @@ extern BIO *bio_err;
 | 
			
		||||
extern CONF *config;
 | 
			
		||||
extern char *default_config_file;
 | 
			
		||||
extern BIO *bio_err;
 | 
			
		||||
extern int in_FIPS_mode;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										71
									
								
								apps/dgst.c
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								apps/dgst.c
									
									
									
									
									
								
							@@ -76,7 +76,7 @@
 | 
			
		||||
 | 
			
		||||
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
	  EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title,
 | 
			
		||||
	  const char *file,BIO *bmd,const char *hmac_key);
 | 
			
		||||
	  const char *file,BIO *bmd,const char *hmac_key, int non_fips_allow);
 | 
			
		||||
 | 
			
		||||
int MAIN(int, char **);
 | 
			
		||||
 | 
			
		||||
@@ -101,14 +101,16 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	EVP_PKEY *sigkey = NULL;
 | 
			
		||||
	unsigned char *sigbuf = NULL;
 | 
			
		||||
	int siglen = 0;
 | 
			
		||||
	unsigned int sig_flags = 0;
 | 
			
		||||
	char *passargin = NULL, *passin = NULL;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	char *engine=NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	char *hmac_key=NULL;
 | 
			
		||||
	int non_fips_allow = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
ERR_load_crypto_strings();
 | 
			
		||||
	if ((buf=(unsigned char *)OPENSSL_malloc(BUFSIZE)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err,"out of memory\n");
 | 
			
		||||
@@ -167,6 +169,27 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			keyfile=*(++argv);
 | 
			
		||||
			do_verify = 1;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-x931") == 0)
 | 
			
		||||
			sig_flags = EVP_MD_CTX_FLAG_PAD_X931;
 | 
			
		||||
		else if (strcmp(*argv,"-pss_saltlen") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			int saltlen;
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
			saltlen=atoi(*(++argv));
 | 
			
		||||
			if (saltlen == -1)
 | 
			
		||||
				sig_flags = EVP_MD_CTX_FLAG_PSS_MREC;
 | 
			
		||||
			else if (saltlen == -2)
 | 
			
		||||
				sig_flags = EVP_MD_CTX_FLAG_PSS_MDLEN;
 | 
			
		||||
			else if (saltlen < -2 || saltlen >= 0xFFFE)
 | 
			
		||||
				{
 | 
			
		||||
				BIO_printf(bio_err, "Invalid PSS salt length %d\n", saltlen);
 | 
			
		||||
				goto end;
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				sig_flags = saltlen;
 | 
			
		||||
			sig_flags <<= 16;
 | 
			
		||||
			sig_flags |= EVP_MD_CTX_FLAG_PAD_PSS;
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-signature") == 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1) break;
 | 
			
		||||
@@ -190,6 +213,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			out_bin = 1;
 | 
			
		||||
		else if (strcmp(*argv,"-d") == 0)
 | 
			
		||||
			debug=1;
 | 
			
		||||
		else if (strcmp(*argv,"-non-fips-allow") == 0)
 | 
			
		||||
			non_fips_allow=1;
 | 
			
		||||
		else if (!strcmp(*argv,"-hmac"))
 | 
			
		||||
			{
 | 
			
		||||
			if (--argc < 1)
 | 
			
		||||
@@ -231,29 +256,33 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		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,"-%-14s to use the %s message digest algorithm (default)\n",
 | 
			
		||||
			LN_md5,LN_md5);
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
 | 
			
		||||
		BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_md4,LN_md4);
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
 | 
			
		||||
		BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_md2,LN_md2);
 | 
			
		||||
#ifndef OPENSSL_NO_SHA
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
 | 
			
		||||
		BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_sha1,LN_sha1);
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
 | 
			
		||||
		BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_sha,LN_sha);
 | 
			
		||||
#ifndef OPENSSL_NO_SHA256
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
 | 
			
		||||
		BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_sha224,LN_sha224);
 | 
			
		||||
		BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_sha256,LN_sha256);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SHA512
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
 | 
			
		||||
		BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_sha384,LN_sha384);
 | 
			
		||||
		BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_sha512,LN_sha512);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
 | 
			
		||||
		BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_mdc2,LN_mdc2);
 | 
			
		||||
		BIO_printf(bio_err,"-%3s to use the %s message digest algorithm\n",
 | 
			
		||||
		BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
 | 
			
		||||
			LN_ripemd160,LN_ripemd160);
 | 
			
		||||
		err=1;
 | 
			
		||||
		goto end;
 | 
			
		||||
@@ -349,8 +378,20 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			goto end;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	if (non_fips_allow)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_MD_CTX *md_ctx;
 | 
			
		||||
		BIO_get_md_ctx(bmd,&md_ctx);
 | 
			
		||||
		EVP_MD_CTX_set_flags(md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (sig_flags)
 | 
			
		||||
		{
 | 
			
		||||
		EVP_MD_CTX *md_ctx;
 | 
			
		||||
		BIO_get_md_ctx(bmd,&md_ctx);
 | 
			
		||||
		EVP_MD_CTX_set_flags(md_ctx, sig_flags);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	/* we use md as a filter, reading from 'in' */
 | 
			
		||||
	if (!BIO_set_md(bmd,md))
 | 
			
		||||
@@ -366,7 +407,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_set_fp(in,stdin,BIO_NOCLOSE);
 | 
			
		||||
		err=do_fp(out, buf,inp,separator, out_bin, sigkey, sigbuf,
 | 
			
		||||
			  siglen,"","(stdin)",bmd,hmac_key);
 | 
			
		||||
			  siglen,"","(stdin)",bmd,hmac_key,non_fips_allow);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
@@ -392,7 +433,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			else
 | 
			
		||||
				tmp="";
 | 
			
		||||
			r=do_fp(out,buf,inp,separator,out_bin,sigkey,sigbuf,
 | 
			
		||||
				siglen,tmp,argv[i],bmd,hmac_key);
 | 
			
		||||
				siglen,tmp,argv[i],bmd,hmac_key,non_fips_allow);
 | 
			
		||||
			if(r)
 | 
			
		||||
			    err=r;
 | 
			
		||||
			if(tofree)
 | 
			
		||||
@@ -419,7 +460,7 @@ end:
 | 
			
		||||
 | 
			
		||||
int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
 | 
			
		||||
	  EVP_PKEY *key, unsigned char *sigin, int siglen, const char *title,
 | 
			
		||||
	  const char *file,BIO *bmd,const char *hmac_key)
 | 
			
		||||
	  const char *file,BIO *bmd,const char *hmac_key,int non_fips_allow)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned int len;
 | 
			
		||||
	int i;
 | 
			
		||||
 
 | 
			
		||||
@@ -87,6 +87,7 @@
 | 
			
		||||
 * -camellia128 - encrypt output if PEM format
 | 
			
		||||
 * -camellia192 - encrypt output if PEM format
 | 
			
		||||
 * -camellia256 - encrypt output if PEM format
 | 
			
		||||
 * -seed        - encrypt output if PEM format
 | 
			
		||||
 * -text	- print a text version
 | 
			
		||||
 * -modulus	- print the DSA public key
 | 
			
		||||
 */
 | 
			
		||||
@@ -218,6 +219,9 @@ bad:
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
		BIO_printf(bio_err," -camellia128, -camellia192, -camellia256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc camellia\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf(bio_err," -seed           encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
		BIO_printf(bio_err," -text           print the key in text\n");
 | 
			
		||||
		BIO_printf(bio_err," -noout          don't print key out\n");
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								apps/enc.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								apps/enc.c
									
									
									
									
									
								
							@@ -127,6 +127,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char *engine = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	const EVP_MD *dgst=NULL;
 | 
			
		||||
	int non_fips_allow = 0;
 | 
			
		||||
 | 
			
		||||
	apps_startup();
 | 
			
		||||
 | 
			
		||||
@@ -261,6 +262,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (--argc < 1) goto bad;
 | 
			
		||||
			md= *(++argv);
 | 
			
		||||
			}
 | 
			
		||||
		else if (strcmp(*argv,"-non-fips-allow") == 0)
 | 
			
		||||
			non_fips_allow = 1;
 | 
			
		||||
		else if	((argv[0][0] == '-') &&
 | 
			
		||||
			((c=EVP_get_cipherbyname(&(argv[0][1]))) != NULL))
 | 
			
		||||
			{
 | 
			
		||||
@@ -314,7 +317,10 @@ bad:
 | 
			
		||||
 | 
			
		||||
	if (dgst == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		dgst = EVP_md5();
 | 
			
		||||
		if (in_FIPS_mode)
 | 
			
		||||
			dgst = EVP_sha1();
 | 
			
		||||
		else
 | 
			
		||||
			dgst = EVP_md5();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (bufsize != NULL)
 | 
			
		||||
@@ -549,6 +555,11 @@ bad:
 | 
			
		||||
		 */
 | 
			
		||||
 | 
			
		||||
		BIO_get_cipher_ctx(benc, &ctx);
 | 
			
		||||
 | 
			
		||||
		if (non_fips_allow)
 | 
			
		||||
			EVP_CIPHER_CTX_set_flags(ctx,
 | 
			
		||||
				EVP_CIPH_FLAG_NON_FIPS_ALLOW);
 | 
			
		||||
 | 
			
		||||
		if (!EVP_CipherInit_ex(ctx, cipher, NULL, NULL, NULL, enc))
 | 
			
		||||
			{
 | 
			
		||||
			BIO_printf(bio_err, "Error setting cipher %s\n",
 | 
			
		||||
 
 | 
			
		||||
@@ -140,6 +140,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (strcmp(*argv,"-idea") == 0)
 | 
			
		||||
			enc=EVP_idea_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		else if (strcmp(*argv,"-seed") == 0)
 | 
			
		||||
			enc=EVP_seed_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		else if (strcmp(*argv,"-aes128") == 0)
 | 
			
		||||
			enc=EVP_aes_128_cbc();
 | 
			
		||||
@@ -178,6 +182,10 @@ bad:
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		BIO_printf(bio_err," -idea     - encrypt the generated key with IDEA in cbc mode\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf(bio_err," -seed\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
 
 | 
			
		||||
@@ -95,6 +95,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	int ret=1;
 | 
			
		||||
	int i,num=DEFBITS;
 | 
			
		||||
	long l;
 | 
			
		||||
	int use_x931 = 0;
 | 
			
		||||
	const EVP_CIPHER *enc=NULL;
 | 
			
		||||
	unsigned long f4=RSA_F4;
 | 
			
		||||
	char *outfile=NULL;
 | 
			
		||||
@@ -138,6 +139,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			f4=3;
 | 
			
		||||
		else if (strcmp(*argv,"-F4") == 0 || strcmp(*argv,"-f4") == 0)
 | 
			
		||||
			f4=RSA_F4;
 | 
			
		||||
		else if (strcmp(*argv,"-x931") == 0)
 | 
			
		||||
			use_x931 = 1;
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		else if (strcmp(*argv,"-engine") == 0)
 | 
			
		||||
			{
 | 
			
		||||
@@ -160,6 +163,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (strcmp(*argv,"-idea") == 0)
 | 
			
		||||
			enc=EVP_idea_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		else if (strcmp(*argv,"-seed") == 0)
 | 
			
		||||
			enc=EVP_seed_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		else if (strcmp(*argv,"-aes128") == 0)
 | 
			
		||||
			enc=EVP_aes_128_cbc();
 | 
			
		||||
@@ -195,6 +202,10 @@ bad:
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		BIO_printf(bio_err," -idea           encrypt the generated key with IDEA in cbc mode\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf(bio_err," -seed\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
@@ -258,7 +269,17 @@ bad:
 | 
			
		||||
	BIO_printf(bio_err,"Generating RSA private key, %d bit long modulus\n",
 | 
			
		||||
		num);
 | 
			
		||||
 | 
			
		||||
	if(!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
 | 
			
		||||
	if (use_x931)
 | 
			
		||||
		{
 | 
			
		||||
		BIGNUM *pubexp;
 | 
			
		||||
		pubexp = BN_new();
 | 
			
		||||
		if (!BN_set_word(pubexp, f4))
 | 
			
		||||
			goto err;
 | 
			
		||||
		if (!RSA_X931_generate_key_ex(rsa, num, pubexp, &cb))
 | 
			
		||||
			goto err;
 | 
			
		||||
		BN_free(pubexp);
 | 
			
		||||
		}
 | 
			
		||||
	else if(!BN_set_word(bn, f4) || !RSA_generate_key_ex(rsa, num, bn, &cb))
 | 
			
		||||
		goto err;
 | 
			
		||||
		
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
 
 | 
			
		||||
@@ -1227,7 +1227,7 @@ static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp)
 | 
			
		||||
		return 0;
 | 
			
		||||
	BIO_printf(cbio, http_resp, i2d_OCSP_RESPONSE(resp, NULL));
 | 
			
		||||
	i2d_OCSP_RESPONSE_bio(cbio, resp);
 | 
			
		||||
	BIO_flush(cbio);
 | 
			
		||||
	(void)BIO_flush(cbio);
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,9 +8,8 @@
 | 
			
		||||
HOME			= .
 | 
			
		||||
RANDFILE		= $ENV::HOME/.rnd
 | 
			
		||||
 | 
			
		||||
# Extra OBJECT IDENTIFIER info:
 | 
			
		||||
#oid_file		= $ENV::HOME/.oid
 | 
			
		||||
oid_section		= new_oids
 | 
			
		||||
# Uncomment out to enable OpenSSL configuration see config(3)
 | 
			
		||||
# openssl_conf = openssl_init
 | 
			
		||||
 | 
			
		||||
# To use this configuration file with the "-extfile" option of the
 | 
			
		||||
# "openssl x509" utility, name here the section containing the
 | 
			
		||||
@@ -19,13 +18,22 @@ oid_section		= new_oids
 | 
			
		||||
# (Alternatively, use a configuration file that has only
 | 
			
		||||
# X.509v3 extensions in its main [= default] section.)
 | 
			
		||||
 | 
			
		||||
[openssl_init]
 | 
			
		||||
# Extra OBJECT IDENTIFIER info:
 | 
			
		||||
oid_section = new_oids
 | 
			
		||||
alg_section = algs
 | 
			
		||||
 | 
			
		||||
[ new_oids ]
 | 
			
		||||
 | 
			
		||||
# We can add new OIDs in here for use by 'ca' and 'req'.
 | 
			
		||||
# We can add new OIDs in here for use by any config aware application
 | 
			
		||||
# Add a simple OID like this:
 | 
			
		||||
# testoid1=1.2.3.4
 | 
			
		||||
# shortname=Long Object Identifier Name, 1.2.3.4
 | 
			
		||||
# Or use config file substitution like this:
 | 
			
		||||
# testoid2=${testoid1}.5.6
 | 
			
		||||
# testoid2=OID2 LONG NAME, ${testoid1}.5.6, OTHER OID
 | 
			
		||||
 | 
			
		||||
[ algs ]
 | 
			
		||||
# Algorithm configuration options. Currently just fips_mode
 | 
			
		||||
fips_mode = no
 | 
			
		||||
 | 
			
		||||
####################################################################
 | 
			
		||||
[ ca ]
 | 
			
		||||
 
 | 
			
		||||
@@ -147,6 +147,7 @@ char *default_config_file=NULL;
 | 
			
		||||
#ifdef MONOLITH
 | 
			
		||||
CONF *config=NULL;
 | 
			
		||||
BIO *bio_err=NULL;
 | 
			
		||||
int in_FIPS_mode=0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -232,6 +233,19 @@ int main(int Argc, char *Argv[])
 | 
			
		||||
	arg.data=NULL;
 | 
			
		||||
	arg.count=0;
 | 
			
		||||
 | 
			
		||||
	in_FIPS_mode = 0;
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
	if(getenv("OPENSSL_FIPS")) {
 | 
			
		||||
		if (!FIPS_mode_set(1)) {
 | 
			
		||||
			ERR_load_crypto_strings();
 | 
			
		||||
			ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE));
 | 
			
		||||
			EXIT(1);
 | 
			
		||||
		}
 | 
			
		||||
		in_FIPS_mode = 1;
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (bio_err == NULL)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 
 | 
			
		||||
@@ -8,9 +8,8 @@
 | 
			
		||||
HOME			= .
 | 
			
		||||
RANDFILE		= $ENV::HOME/.rnd
 | 
			
		||||
 | 
			
		||||
# Extra OBJECT IDENTIFIER info:
 | 
			
		||||
#oid_file		= $ENV::HOME/.oid
 | 
			
		||||
oid_section		= new_oids
 | 
			
		||||
# Uncomment out to enable OpenSSL configuration see config(3)
 | 
			
		||||
# openssl_conf = openssl_init
 | 
			
		||||
 | 
			
		||||
# To use this configuration file with the "-extfile" option of the
 | 
			
		||||
# "openssl x509" utility, name here the section containing the
 | 
			
		||||
@@ -19,13 +18,22 @@ oid_section		= new_oids
 | 
			
		||||
# (Alternatively, use a configuration file that has only
 | 
			
		||||
# X.509v3 extensions in its main [= default] section.)
 | 
			
		||||
 | 
			
		||||
[openssl_init]
 | 
			
		||||
# Extra OBJECT IDENTIFIER info:
 | 
			
		||||
oid_section = new_oids
 | 
			
		||||
alg_section = algs
 | 
			
		||||
 | 
			
		||||
[ new_oids ]
 | 
			
		||||
 | 
			
		||||
# We can add new OIDs in here for use by 'ca' and 'req'.
 | 
			
		||||
# We can add new OIDs in here for use by any config aware application
 | 
			
		||||
# Add a simple OID like this:
 | 
			
		||||
# testoid1=1.2.3.4
 | 
			
		||||
# shortname=Long Object Identifier Name, 1.2.3.4
 | 
			
		||||
# Or use config file substitution like this:
 | 
			
		||||
# testoid2=${testoid1}.5.6
 | 
			
		||||
# testoid2=OID2 LONG NAME, ${testoid1}.5.6, OTHER OID
 | 
			
		||||
 | 
			
		||||
[ algs ]
 | 
			
		||||
# Algorithm configuration options. Currently just fips_mode
 | 
			
		||||
fips_mode = no
 | 
			
		||||
 | 
			
		||||
####################################################################
 | 
			
		||||
[ ca ]
 | 
			
		||||
 
 | 
			
		||||
@@ -110,7 +110,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    int maciter = PKCS12_DEFAULT_ITER;
 | 
			
		||||
    int twopass = 0;
 | 
			
		||||
    int keytype = 0;
 | 
			
		||||
    int cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC;
 | 
			
		||||
    int cert_pbe;
 | 
			
		||||
    int key_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    int macver = 1;
 | 
			
		||||
@@ -127,6 +127,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
    apps_startup();
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
    if (FIPS_mode())
 | 
			
		||||
	cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
 | 
			
		||||
    else
 | 
			
		||||
#endif
 | 
			
		||||
    cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC;
 | 
			
		||||
 | 
			
		||||
    enc = EVP_des_ede3_cbc();
 | 
			
		||||
    if (bio_err == NULL ) bio_err = BIO_new_fp (stderr, BIO_NOCLOSE);
 | 
			
		||||
 | 
			
		||||
@@ -153,10 +160,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    			cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
 | 
			
		||||
		else if (!strcmp (*args, "-export")) export_cert = 1;
 | 
			
		||||
		else if (!strcmp (*args, "-des")) enc=EVP_des_cbc();
 | 
			
		||||
		else if (!strcmp (*args, "-des3")) enc = EVP_des_ede3_cbc();
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		else if (!strcmp (*args, "-idea")) enc=EVP_idea_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
		else if (!strcmp (*args, "-des3")) enc = EVP_des_ede3_cbc();
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		else if (!strcmp(*args, "-seed")) enc=EVP_seed_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		else if (!strcmp(*args,"-aes128")) enc=EVP_aes_128_cbc();
 | 
			
		||||
		else if (!strcmp(*args,"-aes192")) enc=EVP_aes_192_cbc();
 | 
			
		||||
@@ -306,6 +316,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	BIO_printf (bio_err, "-idea         encrypt private keys with idea\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	BIO_printf (bio_err, "-seed         encrypt private keys with seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
	BIO_printf (bio_err, "-aes128, -aes192, -aes256\n");
 | 
			
		||||
	BIO_printf (bio_err, "              encrypt PEM output with cbc aes\n");
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								apps/progs.h
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								apps/progs.h
									
									
									
									
									
								
							@@ -197,6 +197,9 @@ FUNCTION functions[] = {
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea",enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed",enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC4
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc4",enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
@@ -263,6 +266,18 @@ FUNCTION functions[] = {
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"idea-ofb",enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-cbc",enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-ecb",enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-cfb",enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"seed-ofb",enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	{FUNC_TYPE_CIPHER,"rc2-cbc",enc_main},
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -61,13 +61,14 @@ foreach (
 | 
			
		||||
	"camellia-192-cbc", "camellia-192-ecb",
 | 
			
		||||
	"camellia-256-cbc", "camellia-256-ecb",
 | 
			
		||||
	"base64",
 | 
			
		||||
	"des", "des3", "desx", "idea", "rc4", "rc4-40",
 | 
			
		||||
	"des", "des3", "desx", "idea", "seed", "rc4", "rc4-40",
 | 
			
		||||
	"rc2", "bf", "cast", "rc5",
 | 
			
		||||
	"des-ecb", "des-ede",    "des-ede3",
 | 
			
		||||
	"des-cbc", "des-ede-cbc","des-ede3-cbc",
 | 
			
		||||
	"des-cfb", "des-ede-cfb","des-ede3-cfb",
 | 
			
		||||
	"des-ofb", "des-ede-ofb","des-ede3-ofb",
 | 
			
		||||
	"idea-cbc","idea-ecb",   "idea-cfb", "idea-ofb",
 | 
			
		||||
	"idea-cbc","idea-ecb",    "idea-cfb", "idea-ofb",
 | 
			
		||||
	"seed-cbc","seed-ecb",    "seed-cfb", "seed-ofb",
 | 
			
		||||
	"rc2-cbc", "rc2-ecb", "rc2-cfb","rc2-ofb", "rc2-64-cbc", "rc2-40-cbc",
 | 
			
		||||
	"bf-cbc",  "bf-ecb",     "bf-cfb",   "bf-ofb",
 | 
			
		||||
	"cast5-cbc","cast5-ecb", "cast5-cfb","cast5-ofb",
 | 
			
		||||
@@ -80,6 +81,7 @@ foreach (
 | 
			
		||||
	elsif ($_ =~ /aes/)  { $t="#ifndef OPENSSL_NO_AES\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /camellia/)  { $t="#ifndef OPENSSL_NO_CAMELLIA\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /idea/) { $t="#ifndef OPENSSL_NO_IDEA\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /seed/) { $t="#ifndef OPENSSL_NO_SEED\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /rc4/)  { $t="#ifndef OPENSSL_NO_RC4\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /rc2/)  { $t="#ifndef OPENSSL_NO_RC2\n${t}#endif\n"; }
 | 
			
		||||
	elsif ($_ =~ /bf/)   { $t="#ifndef OPENSSL_NO_BF\n${t}#endif\n"; }
 | 
			
		||||
 
 | 
			
		||||
@@ -213,7 +213,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_write(out, buf, chunk);
 | 
			
		||||
		num -= chunk;
 | 
			
		||||
		}
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	app_RAND_write_file(NULL, bio_err);
 | 
			
		||||
	ret = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -81,6 +81,7 @@
 | 
			
		||||
 * -des		- encrypt output if PEM format with DES in cbc mode
 | 
			
		||||
 * -des3	- encrypt output if PEM format
 | 
			
		||||
 * -idea	- encrypt output if PEM format
 | 
			
		||||
 * -seed	- encrypt output if PEM format
 | 
			
		||||
 * -aes128	- encrypt output if PEM format
 | 
			
		||||
 * -aes192	- encrypt output if PEM format
 | 
			
		||||
 * -aes256	- encrypt output if PEM format
 | 
			
		||||
@@ -211,6 +212,9 @@ bad:
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
		BIO_printf(bio_err," -idea           encrypt PEM output with cbc idea\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf(bio_err," -seed           encrypt PEM output with cbc seed\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
		BIO_printf(bio_err," -aes128, -aes192, -aes256\n");
 | 
			
		||||
		BIO_printf(bio_err,"                 encrypt PEM output with cbc aes\n");
 | 
			
		||||
 
 | 
			
		||||
@@ -573,5 +573,5 @@ void MS_CALLBACK msg_cb(int write_p, int version, int content_type, const void *
 | 
			
		||||
			BIO_printf(bio, " ...");
 | 
			
		||||
		BIO_printf(bio, "\n");
 | 
			
		||||
		}
 | 
			
		||||
	BIO_flush(bio);
 | 
			
		||||
	(void)BIO_flush(bio);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -668,7 +668,7 @@ re_start:
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		BIO_ctrl_set_connected(sbio, 1, &peer);
 | 
			
		||||
		(void)BIO_ctrl_set_connected(sbio, 1, &peer);
 | 
			
		||||
 | 
			
		||||
		if ( enable_timeouts)
 | 
			
		||||
			{
 | 
			
		||||
@@ -752,7 +752,7 @@ re_start:
 | 
			
		||||
		while (mbuf_len>3 && mbuf[3]=='-');
 | 
			
		||||
		/* STARTTLS command requires EHLO... */
 | 
			
		||||
		BIO_printf(fbio,"EHLO openssl.client.net\r\n");
 | 
			
		||||
		BIO_flush(fbio);
 | 
			
		||||
		(void)BIO_flush(fbio);
 | 
			
		||||
		/* wait for multi-line response to end EHLO SMTP response */
 | 
			
		||||
		do
 | 
			
		||||
			{
 | 
			
		||||
@@ -761,7 +761,7 @@ re_start:
 | 
			
		||||
				foundit=1;
 | 
			
		||||
			}
 | 
			
		||||
		while (mbuf_len>3 && mbuf[3]=='-');
 | 
			
		||||
		BIO_flush(fbio);
 | 
			
		||||
		(void)BIO_flush(fbio);
 | 
			
		||||
		BIO_pop(fbio);
 | 
			
		||||
		BIO_free(fbio);
 | 
			
		||||
		if (!foundit)
 | 
			
		||||
@@ -785,7 +785,7 @@ re_start:
 | 
			
		||||
		BIO_gets(fbio,mbuf,BUFSIZZ);
 | 
			
		||||
		/* STARTTLS command requires CAPABILITY... */
 | 
			
		||||
		BIO_printf(fbio,". CAPABILITY\r\n");
 | 
			
		||||
		BIO_flush(fbio);
 | 
			
		||||
		(void)BIO_flush(fbio);
 | 
			
		||||
		/* wait for multi-line CAPABILITY response */
 | 
			
		||||
		do
 | 
			
		||||
			{
 | 
			
		||||
@@ -794,7 +794,7 @@ re_start:
 | 
			
		||||
				foundit=1;
 | 
			
		||||
			}
 | 
			
		||||
		while (mbuf_len>3 && mbuf[0]!='.');
 | 
			
		||||
		BIO_flush(fbio);
 | 
			
		||||
		(void)BIO_flush(fbio);
 | 
			
		||||
		BIO_pop(fbio);
 | 
			
		||||
		BIO_free(fbio);
 | 
			
		||||
		if (!foundit)
 | 
			
		||||
@@ -814,7 +814,7 @@ re_start:
 | 
			
		||||
			mbuf_len = BIO_gets(fbio,mbuf,BUFSIZZ);
 | 
			
		||||
			}
 | 
			
		||||
		while (mbuf_len>3 && mbuf[3]=='-');
 | 
			
		||||
		BIO_flush(fbio);
 | 
			
		||||
		(void)BIO_flush(fbio);
 | 
			
		||||
		BIO_pop(fbio);
 | 
			
		||||
		BIO_free(fbio);
 | 
			
		||||
		BIO_printf(sbio,"AUTH TLS\r\n");
 | 
			
		||||
@@ -1303,6 +1303,6 @@ static void print_stuff(BIO *bio, SSL *s, int full)
 | 
			
		||||
	if (peer != NULL)
 | 
			
		||||
		X509_free(peer);
 | 
			
		||||
	/* flush, or debugging output gets mixed with http response */
 | 
			
		||||
	BIO_flush(bio);
 | 
			
		||||
	(void)BIO_flush(bio);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -145,6 +145,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (!strcmp (*args, "-des")) 
 | 
			
		||||
				cipher = EVP_des_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		else if (!strcmp (*args, "-seed")) 
 | 
			
		||||
				cipher = EVP_seed_cbc();
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
		else if (!strcmp (*args, "-rc2-40")) 
 | 
			
		||||
				cipher = EVP_rc2_40_cbc();
 | 
			
		||||
@@ -423,6 +427,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		BIO_printf (bio_err, "-des3          encrypt with triple DES\n");
 | 
			
		||||
		BIO_printf (bio_err, "-des           encrypt with DES\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		BIO_printf (bio_err, "-seed          encrypt with SEED\n");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
		BIO_printf (bio_err, "-rc2-40        encrypt with RC2-40 (default)\n");
 | 
			
		||||
		BIO_printf (bio_err, "-rc2-64        encrypt with RC2-64\n");
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										138
									
								
								apps/speed.c
									
									
									
									
									
								
							
							
						
						
									
										138
									
								
								apps/speed.c
									
									
									
									
									
								
							@@ -201,6 +201,9 @@
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
#include <openssl/idea.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
#include <openssl/seed.h>
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
#include <openssl/blowfish.h>
 | 
			
		||||
#endif
 | 
			
		||||
@@ -272,7 +275,7 @@ static void print_result(int alg,int run_no,int count,double time_used);
 | 
			
		||||
static int do_multi(int multi);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define ALGOR_NUM	24
 | 
			
		||||
#define ALGOR_NUM	28
 | 
			
		||||
#define SIZE_NUM	5
 | 
			
		||||
#define RSA_NUM		4
 | 
			
		||||
#define DSA_NUM		3
 | 
			
		||||
@@ -282,11 +285,12 @@ static int do_multi(int multi);
 | 
			
		||||
 | 
			
		||||
static const char *names[ALGOR_NUM]={
 | 
			
		||||
  "md2","mdc2","md4","md5","hmac(md5)","sha1","rmd160","rc4",
 | 
			
		||||
  "des cbc","des ede3","idea cbc",
 | 
			
		||||
  "des cbc","des ede3","idea cbc","seed cbc",
 | 
			
		||||
  "rc2 cbc","rc5-32/12 cbc","blowfish cbc","cast cbc",
 | 
			
		||||
  "aes-128 cbc","aes-192 cbc","aes-256 cbc",
 | 
			
		||||
  "camellia-128 cbc","camellia-192 cbc","camellia-256 cbc",
 | 
			
		||||
  "evp","sha256","sha512"};
 | 
			
		||||
  "evp","sha256","sha512",
 | 
			
		||||
  "aes-128 ige","aes-192 ige","aes-256 ige"};
 | 
			
		||||
static double results[ALGOR_NUM][SIZE_NUM];
 | 
			
		||||
static int lengths[SIZE_NUM]={16,64,256,1024,8*1024};
 | 
			
		||||
static double rsa_results[RSA_NUM][2];
 | 
			
		||||
@@ -533,6 +537,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	IDEA_KEY_SCHEDULE idea_ks;
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	SEED_KEY_SCHEDULE seed_ks;
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
	BF_KEY bf_ks;
 | 
			
		||||
#endif
 | 
			
		||||
@@ -597,19 +604,23 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#define	D_CBC_DES	8
 | 
			
		||||
#define	D_EDE3_DES	9
 | 
			
		||||
#define	D_CBC_IDEA	10
 | 
			
		||||
#define	D_CBC_RC2	11
 | 
			
		||||
#define	D_CBC_RC5	12
 | 
			
		||||
#define	D_CBC_BF	13
 | 
			
		||||
#define	D_CBC_CAST	14
 | 
			
		||||
#define D_CBC_128_AES	15
 | 
			
		||||
#define D_CBC_192_AES	16
 | 
			
		||||
#define D_CBC_256_AES	17
 | 
			
		||||
#define D_CBC_128_CML   18 
 | 
			
		||||
#define D_CBC_192_CML   19
 | 
			
		||||
#define D_CBC_256_CML   20 
 | 
			
		||||
#define D_EVP		21
 | 
			
		||||
#define D_SHA256	22	
 | 
			
		||||
#define D_SHA512	23
 | 
			
		||||
#define	D_CBC_SEED	11
 | 
			
		||||
#define	D_CBC_RC2	12
 | 
			
		||||
#define	D_CBC_RC5	13
 | 
			
		||||
#define	D_CBC_BF	14
 | 
			
		||||
#define	D_CBC_CAST	15
 | 
			
		||||
#define D_CBC_128_AES	16
 | 
			
		||||
#define D_CBC_192_AES	17
 | 
			
		||||
#define D_CBC_256_AES	18
 | 
			
		||||
#define D_CBC_128_CML   19 
 | 
			
		||||
#define D_CBC_192_CML   20
 | 
			
		||||
#define D_CBC_256_CML   21 
 | 
			
		||||
#define D_EVP		22
 | 
			
		||||
#define D_SHA256	23	
 | 
			
		||||
#define D_SHA512	24
 | 
			
		||||
#define D_IGE_128_AES   25
 | 
			
		||||
#define D_IGE_192_AES   26
 | 
			
		||||
#define D_IGE_256_AES   27
 | 
			
		||||
	double d=0.0;
 | 
			
		||||
	long c[ALGOR_NUM][SIZE_NUM];
 | 
			
		||||
#define	R_DSA_512	0
 | 
			
		||||
@@ -950,7 +961,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			if (strcmp(*argv,"aes-128-cbc") == 0) doit[D_CBC_128_AES]=1;
 | 
			
		||||
		else	if (strcmp(*argv,"aes-192-cbc") == 0) doit[D_CBC_192_AES]=1;
 | 
			
		||||
		else	if (strcmp(*argv,"aes-256-cbc") == 0) doit[D_CBC_256_AES]=1;
 | 
			
		||||
		else
 | 
			
		||||
		else    if (strcmp(*argv,"aes-128-ige") == 0) doit[D_IGE_128_AES]=1;
 | 
			
		||||
		else	if (strcmp(*argv,"aes-192-ige") == 0) doit[D_IGE_192_AES]=1;
 | 
			
		||||
		else	if (strcmp(*argv,"aes-256-ige") == 0) doit[D_IGE_256_AES]=1;
 | 
			
		||||
                else
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
			if (strcmp(*argv,"camellia-128-cbc") == 0) doit[D_CBC_128_CML]=1;
 | 
			
		||||
@@ -999,6 +1013,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		else if (strcmp(*argv,"idea") == 0) doit[D_CBC_IDEA]=1;
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
		     if (strcmp(*argv,"seed-cbc") == 0) doit[D_CBC_SEED]=1;
 | 
			
		||||
		else if (strcmp(*argv,"seed") == 0) doit[D_CBC_SEED]=1;
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
		     if (strcmp(*argv,"bf-cbc") == 0) doit[D_CBC_BF]=1;
 | 
			
		||||
		else if (strcmp(*argv,"blowfish") == 0) doit[D_CBC_BF]=1;
 | 
			
		||||
@@ -1144,6 +1163,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
			BIO_printf(bio_err,"idea-cbc ");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
			BIO_printf(bio_err,"seed-cbc ");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
			BIO_printf(bio_err,"rc2-cbc  ");
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1153,7 +1175,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
			BIO_printf(bio_err,"bf-cbc");
 | 
			
		||||
#endif
 | 
			
		||||
#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
 | 
			
		||||
#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || !defined(OPENSSL_NO_RC2) || \
 | 
			
		||||
    !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_RC5)
 | 
			
		||||
			BIO_printf(bio_err,"\n");
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1162,6 +1184,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
			BIO_printf(bio_err,"aes-128-cbc aes-192-cbc aes-256-cbc ");
 | 
			
		||||
			BIO_printf(bio_err,"aes-128-ige aes-192-ige aes-256-ige ");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
			BIO_printf(bio_err,"\n");
 | 
			
		||||
@@ -1195,6 +1218,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
			BIO_printf(bio_err,"idea     ");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
			BIO_printf(bio_err,"seed     ");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
			BIO_printf(bio_err,"rc2      ");
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1213,10 +1239,10 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
			BIO_printf(bio_err,"blowfish");
 | 
			
		||||
#endif
 | 
			
		||||
#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_RC2) || \
 | 
			
		||||
    !defined(OPENSSL_NO_DES) || !defined(OPENSSL_NO_RSA) || \
 | 
			
		||||
    !defined(OPENSSL_NO_BF) || !defined(OPENSSL_NO_AES) || \
 | 
			
		||||
    !defined(OPENSSL_NO_CAMELLIA) 
 | 
			
		||||
#if !defined(OPENSSL_NO_IDEA) || !defined(OPENSSL_NO_SEED) || \
 | 
			
		||||
    !defined(OPENSSL_NO_RC2) || !defined(OPENSSL_NO_DES) || \
 | 
			
		||||
    !defined(OPENSSL_NO_RSA) || !defined(OPENSSL_NO_BF) || \
 | 
			
		||||
    !defined(OPENSSL_NO_AES) || !defined(OPENSSL_NO_CAMELLIA)
 | 
			
		||||
			BIO_printf(bio_err,"\n");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -1318,6 +1344,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
	idea_set_encrypt_key(key16,&idea_ks);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	SEED_set_key(key16,&seed_ks);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC4
 | 
			
		||||
	RC4_set_key(&rc4_ks,16,key16);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1361,6 +1390,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	c[D_CBC_DES][0]=count;
 | 
			
		||||
	c[D_EDE3_DES][0]=count/3;
 | 
			
		||||
	c[D_CBC_IDEA][0]=count;
 | 
			
		||||
	c[D_CBC_SEED][0]=count;
 | 
			
		||||
	c[D_CBC_RC2][0]=count;
 | 
			
		||||
	c[D_CBC_RC5][0]=count;
 | 
			
		||||
	c[D_CBC_BF][0]=count;
 | 
			
		||||
@@ -1373,6 +1403,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	c[D_CBC_256_CML][0]=count;
 | 
			
		||||
	c[D_SHA256][0]=count;
 | 
			
		||||
	c[D_SHA512][0]=count;
 | 
			
		||||
	c[D_IGE_128_AES][0]=count;
 | 
			
		||||
	c[D_IGE_192_AES][0]=count;
 | 
			
		||||
	c[D_IGE_256_AES][0]=count;
 | 
			
		||||
 | 
			
		||||
	for (i=1; i<SIZE_NUM; i++)
 | 
			
		||||
		{
 | 
			
		||||
@@ -1396,6 +1429,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		c[D_CBC_DES][i]=c[D_CBC_DES][i-1]*l0/l1;
 | 
			
		||||
		c[D_EDE3_DES][i]=c[D_EDE3_DES][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_IDEA][i]=c[D_CBC_IDEA][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_SEED][i]=c[D_CBC_SEED][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_RC2][i]=c[D_CBC_RC2][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_RC5][i]=c[D_CBC_RC5][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_BF][i]=c[D_CBC_BF][i-1]*l0/l1;
 | 
			
		||||
@@ -1406,6 +1440,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 		c[D_CBC_128_CML][i]=c[D_CBC_128_CML][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_192_CML][i]=c[D_CBC_192_CML][i-1]*l0/l1;
 | 
			
		||||
		c[D_CBC_256_CML][i]=c[D_CBC_256_CML][i-1]*l0/l1;
 | 
			
		||||
		c[D_IGE_128_AES][i]=c[D_IGE_128_AES][i-1]*l0/l1;
 | 
			
		||||
		c[D_IGE_192_AES][i]=c[D_IGE_192_AES][i-1]*l0/l1;
 | 
			
		||||
		c[D_IGE_256_AES][i]=c[D_IGE_256_AES][i-1]*l0/l1;
 | 
			
		||||
		}
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
	rsa_c[R_RSA_512][0]=count/2000;
 | 
			
		||||
@@ -1799,6 +1836,48 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (doit[D_IGE_128_AES])
 | 
			
		||||
		{
 | 
			
		||||
		for (j=0; j<SIZE_NUM; j++)
 | 
			
		||||
			{
 | 
			
		||||
			print_message(names[D_IGE_128_AES],c[D_IGE_128_AES][j],lengths[j]);
 | 
			
		||||
			Time_F(START);
 | 
			
		||||
			for (count=0,run=1; COND(c[D_IGE_128_AES][j]); count++)
 | 
			
		||||
				AES_ige_encrypt(buf,buf2,
 | 
			
		||||
					(unsigned long)lengths[j],&aes_ks1,
 | 
			
		||||
					iv,AES_ENCRYPT);
 | 
			
		||||
			d=Time_F(STOP);
 | 
			
		||||
			print_result(D_IGE_128_AES,j,count,d);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (doit[D_IGE_192_AES])
 | 
			
		||||
		{
 | 
			
		||||
		for (j=0; j<SIZE_NUM; j++)
 | 
			
		||||
			{
 | 
			
		||||
			print_message(names[D_IGE_192_AES],c[D_IGE_192_AES][j],lengths[j]);
 | 
			
		||||
			Time_F(START);
 | 
			
		||||
			for (count=0,run=1; COND(c[D_IGE_192_AES][j]); count++)
 | 
			
		||||
				AES_ige_encrypt(buf,buf2,
 | 
			
		||||
					(unsigned long)lengths[j],&aes_ks2,
 | 
			
		||||
					iv,AES_ENCRYPT);
 | 
			
		||||
			d=Time_F(STOP);
 | 
			
		||||
			print_result(D_IGE_192_AES,j,count,d);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	if (doit[D_IGE_256_AES])
 | 
			
		||||
		{
 | 
			
		||||
		for (j=0; j<SIZE_NUM; j++)
 | 
			
		||||
			{
 | 
			
		||||
			print_message(names[D_IGE_256_AES],c[D_IGE_256_AES][j],lengths[j]);
 | 
			
		||||
			Time_F(START);
 | 
			
		||||
			for (count=0,run=1; COND(c[D_IGE_256_AES][j]); count++)
 | 
			
		||||
				AES_ige_encrypt(buf,buf2,
 | 
			
		||||
					(unsigned long)lengths[j],&aes_ks3,
 | 
			
		||||
					iv,AES_ENCRYPT);
 | 
			
		||||
			d=Time_F(STOP);
 | 
			
		||||
			print_result(D_IGE_256_AES,j,count,d);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAMELLIA
 | 
			
		||||
	if (doit[D_CBC_128_CML])
 | 
			
		||||
@@ -1861,6 +1940,21 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_SEED
 | 
			
		||||
	if (doit[D_CBC_SEED])
 | 
			
		||||
		{
 | 
			
		||||
		for (j=0; j<SIZE_NUM; j++)
 | 
			
		||||
			{
 | 
			
		||||
			print_message(names[D_CBC_SEED],c[D_CBC_SEED][j],lengths[j]);
 | 
			
		||||
			Time_F(START);
 | 
			
		||||
			for (count=0,run=1; COND(c[D_CBC_SEED][j]); count++)
 | 
			
		||||
				SEED_cbc_encrypt(buf,buf,
 | 
			
		||||
					(unsigned long)lengths[j],&seed_ks,iv,1);
 | 
			
		||||
			d=Time_F(STOP);
 | 
			
		||||
			print_result(D_CBC_SEED,j,count,d);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC2
 | 
			
		||||
	if (doit[D_CBC_RC2])
 | 
			
		||||
		{
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										99
									
								
								config
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								config
									
									
									
									
									
								
							@@ -48,10 +48,10 @@ done
 | 
			
		||||
 | 
			
		||||
# First get uname entries that we use below
 | 
			
		||||
 | 
			
		||||
MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown"
 | 
			
		||||
RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown"
 | 
			
		||||
SYSTEM=`(uname -s) 2>/dev/null`  || SYSTEM="unknown"
 | 
			
		||||
VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
 | 
			
		||||
[ "$MACHINE" ] || MACHINE=`(uname -m) 2>/dev/null` || MACHINE="unknown"
 | 
			
		||||
[ "$RELEASE" ] || RELEASE=`(uname -r) 2>/dev/null` || RELEASE="unknown"
 | 
			
		||||
[ "$SYSTEM" ] || SYSTEM=`(uname -s) 2>/dev/null`  || SYSTEM="unknown"
 | 
			
		||||
[ "$BUILD" ] || VERSION=`(uname -v) 2>/dev/null` || VERSION="unknown"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Now test for ISC and SCO, since it is has a braindamaged uname.
 | 
			
		||||
@@ -501,20 +501,7 @@ case "$GUESSOS" in
 | 
			
		||||
	OUT="irix-mips3-$CC"
 | 
			
		||||
	;;
 | 
			
		||||
  mips4-sgi-irix64)
 | 
			
		||||
	echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
	echo "         invoke './Configure irix64-mips4-$CC' *manually*."
 | 
			
		||||
	if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
	  echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
	  (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	fi
 | 
			
		||||
        #CPU=`(hinv -t cpu) 2>/dev/null | head -1 | sed 's/^CPU:[^R]*R\([0-9]*\).*/\1/'`
 | 
			
		||||
        #CPU=${CPU:-0}
 | 
			
		||||
        #if [ $CPU -ge 5000 ]; then
 | 
			
		||||
        #        options="$options -mips4"
 | 
			
		||||
        #else
 | 
			
		||||
        #        options="$options -mips3"
 | 
			
		||||
        #fi
 | 
			
		||||
	OUT="irix-mips3-$CC"
 | 
			
		||||
	OUT="irix64-mips4-$CC"
 | 
			
		||||
	;;
 | 
			
		||||
  ppc-apple-rhapsody) OUT="rhapsody-ppc-cc" ;;
 | 
			
		||||
  ppc-apple-darwin*) OUT="darwin-ppc-cc" ;;
 | 
			
		||||
@@ -527,32 +514,19 @@ case "$GUESSOS" in
 | 
			
		||||
	esac
 | 
			
		||||
	if [ "$CC" = "gcc" ]; then
 | 
			
		||||
	    case ${ISA:-generic} in
 | 
			
		||||
	    EV5|EV45)		options="$options -march=ev5";;
 | 
			
		||||
	    EV56|PCA56)		options="$options -march=ev56";;
 | 
			
		||||
	    *)			options="$options -march=ev6";;
 | 
			
		||||
	    EV5|EV45)		options="$options -mcpu=ev5";;
 | 
			
		||||
	    EV56|PCA56)		options="$options -mcpu=ev56";;
 | 
			
		||||
	    *)			options="$options -mcpu=ev6";;
 | 
			
		||||
	    esac
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
  ppc64-*-linux2)
 | 
			
		||||
	echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
	echo "         invoke './Configure linux-ppc64' *manually*."
 | 
			
		||||
	if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
	    echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
	    (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	fi
 | 
			
		||||
	OUT="linux-ppc"
 | 
			
		||||
	OUT="linux-ppc64"
 | 
			
		||||
	;;
 | 
			
		||||
  ppc-*-linux2) OUT="linux-ppc" ;;
 | 
			
		||||
  ia64-*-linux?) OUT="linux-ia64" ;;
 | 
			
		||||
  sparc64-*-linux2)
 | 
			
		||||
	echo "WARNING! If you *know* that your GNU C supports 64-bit/V9 ABI"
 | 
			
		||||
	echo "         and wish to build 64-bit library, then you have to"
 | 
			
		||||
	echo "         invoke './Configure linux64-sparcv9' *manually*."
 | 
			
		||||
	if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
	  echo "          You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
	  (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	fi
 | 
			
		||||
	OUT="linux-sparcv9" ;;
 | 
			
		||||
	OUT="linux64-sparcv9" ;;
 | 
			
		||||
  sparc-*-linux2)
 | 
			
		||||
	KARCH=`awk '/^type/{print$3;exit(0);}' /proc/cpuinfo`
 | 
			
		||||
	case ${KARCH:-sun4} in
 | 
			
		||||
@@ -588,7 +562,8 @@ case "$GUESSOS" in
 | 
			
		||||
  sh*b-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
 | 
			
		||||
  sh*-*-linux2)  OUT="linux-generic32"; options="$options -DL_ENDIAN" ;;
 | 
			
		||||
  m68k*-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
 | 
			
		||||
  s390*-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN -DNO_ASM" ;;
 | 
			
		||||
  s390-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN -DNO_ASM" ;;
 | 
			
		||||
  s390x-*-linux2) OUT="linux-s390x" ;;
 | 
			
		||||
  x86_64-*-linux?) OUT="linux-x86_64" ;;
 | 
			
		||||
  *86-*-linux2) OUT="linux-elf"
 | 
			
		||||
	if [ "$GCCVER" -gt 28 ]; then
 | 
			
		||||
@@ -604,37 +579,18 @@ case "$GUESSOS" in
 | 
			
		||||
        fi ;;
 | 
			
		||||
  *-*-linux1) OUT="linux-aout" ;;
 | 
			
		||||
  *-*-linux2) OUT="linux-generic32" ;;
 | 
			
		||||
  sun4u*-*-solaris2)
 | 
			
		||||
  sun4[uv]*-*-solaris2)
 | 
			
		||||
	OUT="solaris-sparcv9-$CC"
 | 
			
		||||
	ISA64=`(isalist) 2>/dev/null | grep sparcv9`
 | 
			
		||||
	if [ "$ISA64" != "" ]; then
 | 
			
		||||
	    if [ "$CC" = "cc" -a $CCVER -ge 50 ]; then
 | 
			
		||||
		echo "WARNING! If you wish to build 64-bit library, then you have to"
 | 
			
		||||
		echo "         invoke './Configure solaris64-sparcv9-cc' *manually*."
 | 
			
		||||
		if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
		  echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
		  (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
		fi
 | 
			
		||||
		OUT="solaris64-sparcv9-cc"
 | 
			
		||||
	    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" -a -t 1 ]; then
 | 
			
		||||
		  echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
		  (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
		fi
 | 
			
		||||
	    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" -a -t 1 ]; then
 | 
			
		||||
		  echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
		  (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
		fi
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
@@ -655,8 +611,8 @@ case "$GUESSOS" in
 | 
			
		||||
  *-*-sunos4)		OUT="sunos-$CC" ;;
 | 
			
		||||
 | 
			
		||||
  *86*-*-bsdi4)		OUT="BSD-x86-elf"; options="$options no-sse2 -ldl" ;;
 | 
			
		||||
  alpha*-*-*bsd*)	OUT="BSD-generic64; options="$options -DL_ENDIAN" ;;
 | 
			
		||||
  powerpc64-*-*bsd*)	OUT="BSD-generic64; options="$options -DB_ENDIAN" ;;
 | 
			
		||||
  alpha*-*-*bsd*)	OUT="BSD-generic64"; options="$options -DL_ENDIAN" ;;
 | 
			
		||||
  powerpc64-*-*bsd*)	OUT="BSD-generic64"; options="$options -DB_ENDIAN" ;;
 | 
			
		||||
  sparc64-*-*bsd*)	OUT="BSD-sparc64" ;;
 | 
			
		||||
  ia64-*-*bsd*)		OUT="BSD-ia64" ;;
 | 
			
		||||
  amd64-*-*bsd*)	OUT="BSD-x86_64" ;;
 | 
			
		||||
@@ -701,23 +657,11 @@ case "$GUESSOS" in
 | 
			
		||||
	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" -a -t 1 ]; then
 | 
			
		||||
		echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
		(trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
	     fi
 | 
			
		||||
	     OUT="hpux64-ia64-cc"
 | 
			
		||||
	elif [ $CPU_VERSION -ge 532 ]; then	# PA-RISC 2.x CPU
 | 
			
		||||
	     OUT=${OUT:-"hpux-parisc2-${CC}"}
 | 
			
		||||
	     if [ $KERNEL_BITS -eq 64 -a "$CC" = "cc" ]; then
 | 
			
		||||
		echo "WARNING! If you wish to build 64-bit library then you have to"
 | 
			
		||||
		echo "         invoke './Configure hpux64-parisc2-cc' *manually*."
 | 
			
		||||
		if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
		  echo "         You have about 5 seconds to press Ctrl-C to abort."
 | 
			
		||||
		  (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
		fi
 | 
			
		||||
		OUT="hpux64-parisc2-${CC}"
 | 
			
		||||
	     fi
 | 
			
		||||
	elif [ $CPU_VERSION -ge 528 ]; then	# PA-RISC 1.1+ CPU
 | 
			
		||||
	     OUT="hpux-parisc-${CC}"
 | 
			
		||||
@@ -740,12 +684,7 @@ case "$GUESSOS" in
 | 
			
		||||
	else
 | 
			
		||||
	    OUT="aix-cc"
 | 
			
		||||
	    if [ $KERNEL_BITS -eq 64 ]; then
 | 
			
		||||
		echo "WARNING! If you wish to build 64-bit kit, then you have to"
 | 
			
		||||
		echo "         invoke './Configure aix64-cc' *manually*."
 | 
			
		||||
		if [ "$TEST" = "false" -a -t 1 ]; then
 | 
			
		||||
		    echo "         You have ~5 seconds to press Ctrl-C to abort."
 | 
			
		||||
		    (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
 | 
			
		||||
		fi
 | 
			
		||||
		OUT="aix64-cc"
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
	if (lsattr -E -O -l `lsdev -c processor|awk '{print$1;exit}'` | grep -i powerpc) >/dev/null 2>&1; then
 | 
			
		||||
@@ -797,7 +736,7 @@ case "$GUESSOS" in
 | 
			
		||||
  i386-*) options="$options 386" ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
for i in aes bf camellia cast des dh dsa ec hmac idea md2 md5 mdc2 rc2 rc4 rc5 ripemd rsa sha
 | 
			
		||||
for i in aes bf camellia cast des dh dsa ec hmac idea md2 md5 mdc2 rc2 rc4 rc5 ripemd rsa seed sha
 | 
			
		||||
do
 | 
			
		||||
  if [ ! -d crypto/$i ]
 | 
			
		||||
  then
 | 
			
		||||
 
 | 
			
		||||
@@ -33,8 +33,8 @@ GENERAL=Makefile README crypto-lib.com install.com
 | 
			
		||||
 | 
			
		||||
LIB= $(TOP)/libcrypto.a
 | 
			
		||||
SHARED_LIB= libcrypto$(SHLIB_EXT)
 | 
			
		||||
LIBSRC=	cryptlib.c mem.c mem_clr.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c uid.c o_time.c o_str.c o_dir.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 o_str.o o_dir.o $(CPUID_OBJ)
 | 
			
		||||
LIBSRC=	cryptlib.c dyn_lck.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 o_str.c o_dir.c o_init.c fips_err.c 
 | 
			
		||||
LIBOBJ= cryptlib.o dyn_lck.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 o_str.o o_dir.o o_init.o fips_err.o $(CPUID_OBJ)
 | 
			
		||||
 | 
			
		||||
SRC= $(LIBSRC)
 | 
			
		||||
 | 
			
		||||
@@ -47,7 +47,7 @@ ALL=    $(GENERAL) $(SRC) $(HEADER)
 | 
			
		||||
top:
 | 
			
		||||
	@(cd ..; $(MAKE) DIRS=$(DIR) all)
 | 
			
		||||
 | 
			
		||||
all: shared
 | 
			
		||||
all: lib
 | 
			
		||||
 | 
			
		||||
buildinf.h: ../Makefile
 | 
			
		||||
	( echo "#ifndef MK1MF_BUILD"; \
 | 
			
		||||
@@ -95,10 +95,10 @@ links:
 | 
			
		||||
	@target=links; $(RECURSIVE_MAKE)
 | 
			
		||||
 | 
			
		||||
# lib: and $(LIB): are splitted to avoid end-less loop
 | 
			
		||||
lib:	$(LIB)
 | 
			
		||||
lib:	buildinf.h $(LIB) subdirs
 | 
			
		||||
	@touch lib
 | 
			
		||||
$(LIB):	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
 | 
			
		||||
shared: buildinf.h lib subdirs
 | 
			
		||||
@@ -159,6 +159,13 @@ cversion.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
cversion.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h
 | 
			
		||||
cversion.o: ../include/openssl/stack.h ../include/openssl/symhacks.h buildinf.h
 | 
			
		||||
cversion.o: cryptlib.h cversion.c
 | 
			
		||||
dyn_lck.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
dyn_lck.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
dyn_lck.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
			
		||||
dyn_lck.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
dyn_lck.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h
 | 
			
		||||
dyn_lck.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
			
		||||
dyn_lck.o: dyn_lck.c
 | 
			
		||||
ebcdic.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h ebcdic.c
 | 
			
		||||
ex_data.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
ex_data.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
@@ -167,6 +174,13 @@ ex_data.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
ex_data.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h
 | 
			
		||||
ex_data.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
			
		||||
ex_data.o: ex_data.c
 | 
			
		||||
fips_err.o: ../include/openssl/bio.h ../include/openssl/crypto.h
 | 
			
		||||
fips_err.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 | 
			
		||||
fips_err.o: ../include/openssl/fips.h ../include/openssl/lhash.h
 | 
			
		||||
fips_err.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
 | 
			
		||||
fips_err.o: ../include/openssl/ossl_typ.h ../include/openssl/safestack.h
 | 
			
		||||
fips_err.o: ../include/openssl/stack.h ../include/openssl/symhacks.h fips_err.c
 | 
			
		||||
fips_err.o: fips_err.h
 | 
			
		||||
mem.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/buffer.h
 | 
			
		||||
mem.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
 | 
			
		||||
mem.o: ../include/openssl/err.h ../include/openssl/lhash.h
 | 
			
		||||
@@ -187,6 +201,12 @@ mem_dbg.o: ../include/openssl/stack.h ../include/openssl/symhacks.h cryptlib.h
 | 
			
		||||
mem_dbg.o: mem_dbg.c
 | 
			
		||||
o_dir.o: ../e_os.h ../include/openssl/e_os2.h ../include/openssl/opensslconf.h
 | 
			
		||||
o_dir.o: LPdir_unix.c o_dir.c o_dir.h
 | 
			
		||||
o_init.o: ../e_os.h ../include/openssl/bio.h ../include/openssl/crypto.h
 | 
			
		||||
o_init.o: ../include/openssl/e_os2.h ../include/openssl/err.h
 | 
			
		||||
o_init.o: ../include/openssl/lhash.h ../include/openssl/opensslconf.h
 | 
			
		||||
o_init.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
 | 
			
		||||
o_init.o: ../include/openssl/safestack.h ../include/openssl/stack.h
 | 
			
		||||
o_init.o: ../include/openssl/symhacks.h o_init.c
 | 
			
		||||
o_str.o: ../e_os.h ../include/openssl/e_os2.h ../include/openssl/opensslconf.h
 | 
			
		||||
o_str.o: o_str.c o_str.h
 | 
			
		||||
o_time.o: ../include/openssl/e_os2.h ../include/openssl/opensslconf.h o_time.c
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ top:
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
@@ -57,6 +57,11 @@ ax86-cof.s: asm/aes-586.pl ../perlasm/x86asm.pl
 | 
			
		||||
ax86-out.s: asm/aes-586.pl ../perlasm/x86asm.pl
 | 
			
		||||
	(cd asm; $(PERL) aes-586.pl a.out $(CFLAGS) $(PROCESSOR) > ../$@)
 | 
			
		||||
 | 
			
		||||
aes-x86_64.s: asm/aes-x86_64.pl
 | 
			
		||||
	$(PERL) asm/aes-x86_64.pl $@
 | 
			
		||||
# GNU make "catch all"
 | 
			
		||||
aes-%.s:	asm/aes-%.pl;	$(PERL) $< $(CFLAGS) > $@
 | 
			
		||||
 | 
			
		||||
files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,10 @@
 | 
			
		||||
#define AES_MAXNR 14
 | 
			
		||||
#define AES_BLOCK_SIZE 16
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
#define FIPS_AES_SIZE_T	int
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -59,6 +59,7 @@
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include "aes_locl.h"
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_FIPS_AES_ASM)
 | 
			
		||||
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) {
 | 
			
		||||
@@ -129,3 +130,4 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,7 @@
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include <openssl/fips.h>
 | 
			
		||||
#include "aes_locl.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
@@ -631,6 +632,10 @@ int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
   	int i = 0;
 | 
			
		||||
	u32 temp;
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
	FIPS_selftest_check();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (!userKey || !key)
 | 
			
		||||
		return -1;
 | 
			
		||||
	if (bits != 128 && bits != 192 && bits != 256)
 | 
			
		||||
 
 | 
			
		||||
@@ -54,21 +54,25 @@
 | 
			
		||||
#include <openssl/aes.h>
 | 
			
		||||
#include "aes_locl.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
static void hexdump(FILE *f,const char *title,const unsigned char *s,int l)
 | 
			
		||||
    {
 | 
			
		||||
    int n=0;
 | 
			
		||||
#define N_WORDS (AES_BLOCK_SIZE / sizeof(unsigned long))
 | 
			
		||||
typedef struct {
 | 
			
		||||
        unsigned long data[N_WORDS];
 | 
			
		||||
} aes_block_t;
 | 
			
		||||
 | 
			
		||||
    fprintf(f,"%s",title);
 | 
			
		||||
    for( ; n < l ; ++n)
 | 
			
		||||
		{
 | 
			
		||||
		if((n%16) == 0)
 | 
			
		||||
			fprintf(f,"\n%04x",n);
 | 
			
		||||
		fprintf(f," %02x",s[n]);
 | 
			
		||||
		}
 | 
			
		||||
    fprintf(f,"\n");
 | 
			
		||||
    }
 | 
			
		||||
*/
 | 
			
		||||
/* XXX: probably some better way to do this */
 | 
			
		||||
#if defined(__i386__) || defined(__x86_64__)
 | 
			
		||||
#define UNALIGNED_MEMOPS_ARE_FAST 1
 | 
			
		||||
#else
 | 
			
		||||
#define UNALIGNED_MEMOPS_ARE_FAST 0
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if UNALIGNED_MEMOPS_ARE_FAST
 | 
			
		||||
#define load_block(d, s)        (d) = *(const aes_block_t *)(s)
 | 
			
		||||
#define store_block(d, s)       *(aes_block_t *)(d) = (s)
 | 
			
		||||
#else
 | 
			
		||||
#define load_block(d, s)        memcpy((d).data, (s), AES_BLOCK_SIZE)
 | 
			
		||||
#define store_block(d, s)       memcpy((d), (s).data, AES_BLOCK_SIZE)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* N.B. The IV for this mode is _twice_ the block size */
 | 
			
		||||
 | 
			
		||||
@@ -77,68 +81,125 @@ void AES_ige_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
					 unsigned char *ivec, const int enc)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned long n;
 | 
			
		||||
	unsigned long len = length;
 | 
			
		||||
	unsigned char tmp[AES_BLOCK_SIZE];
 | 
			
		||||
	unsigned char tmp2[AES_BLOCK_SIZE];
 | 
			
		||||
	unsigned char prev[AES_BLOCK_SIZE];
 | 
			
		||||
	const unsigned char *iv = ivec;
 | 
			
		||||
	const unsigned char *iv2 = ivec + AES_BLOCK_SIZE;
 | 
			
		||||
	unsigned long len;
 | 
			
		||||
 | 
			
		||||
	OPENSSL_assert(in && out && key && ivec);
 | 
			
		||||
	OPENSSL_assert((AES_ENCRYPT == enc)||(AES_DECRYPT == enc));
 | 
			
		||||
	OPENSSL_assert((length%AES_BLOCK_SIZE) == 0);
 | 
			
		||||
 | 
			
		||||
	len = length / AES_BLOCK_SIZE;
 | 
			
		||||
 | 
			
		||||
	if (AES_ENCRYPT == enc)
 | 
			
		||||
		{
 | 
			
		||||
		/* XXX: Do a separate case for when in != out (strictly should
 | 
			
		||||
		   check for overlap, too) */
 | 
			
		||||
		while (len >= AES_BLOCK_SIZE)
 | 
			
		||||
		if (in != out &&
 | 
			
		||||
		    (UNALIGNED_MEMOPS_ARE_FAST || ((size_t)in|(size_t)out|(size_t)ivec)%sizeof(long)==0))
 | 
			
		||||
			{
 | 
			
		||||
			/*			hexdump(stdout, "in", in, AES_BLOCK_SIZE); */
 | 
			
		||||
			/*			hexdump(stdout, "iv", iv, AES_BLOCK_SIZE); */
 | 
			
		||||
			for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
				out[n] = in[n] ^ iv[n];
 | 
			
		||||
			/*			hexdump(stdout, "in ^ iv", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			AES_encrypt(out, out, key);
 | 
			
		||||
			/*			hexdump(stdout,"enc", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			/*			hexdump(stdout,"iv2", iv2, AES_BLOCK_SIZE); */
 | 
			
		||||
			for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
				out[n] ^= iv2[n];
 | 
			
		||||
			/*			hexdump(stdout,"out", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			iv = out;
 | 
			
		||||
			memcpy(prev, in, AES_BLOCK_SIZE);
 | 
			
		||||
			iv2 = prev;
 | 
			
		||||
			len -= AES_BLOCK_SIZE;
 | 
			
		||||
			in += AES_BLOCK_SIZE;
 | 
			
		||||
			out += AES_BLOCK_SIZE;
 | 
			
		||||
			aes_block_t *ivp = (aes_block_t *)ivec;
 | 
			
		||||
			aes_block_t *iv2p = (aes_block_t *)(ivec + AES_BLOCK_SIZE);
 | 
			
		||||
 | 
			
		||||
			while (len)
 | 
			
		||||
				{
 | 
			
		||||
				aes_block_t *inp = (aes_block_t *)in;
 | 
			
		||||
				aes_block_t *outp = (aes_block_t *)out;
 | 
			
		||||
 | 
			
		||||
				for(n=0 ; n < N_WORDS; ++n)
 | 
			
		||||
					outp->data[n] = inp->data[n] ^ ivp->data[n];
 | 
			
		||||
				AES_encrypt((unsigned char *)outp->data, (unsigned char *)outp->data, key);
 | 
			
		||||
				for(n=0 ; n < N_WORDS; ++n)
 | 
			
		||||
					outp->data[n] ^= iv2p->data[n];
 | 
			
		||||
				ivp = outp;
 | 
			
		||||
				iv2p = inp;
 | 
			
		||||
				--len;
 | 
			
		||||
				in += AES_BLOCK_SIZE;
 | 
			
		||||
				out += AES_BLOCK_SIZE;
 | 
			
		||||
				}
 | 
			
		||||
			memcpy(ivec, ivp->data, AES_BLOCK_SIZE);
 | 
			
		||||
			memcpy(ivec + AES_BLOCK_SIZE, iv2p->data, AES_BLOCK_SIZE);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			aes_block_t tmp, tmp2;
 | 
			
		||||
			aes_block_t iv;
 | 
			
		||||
			aes_block_t iv2;
 | 
			
		||||
 | 
			
		||||
			load_block(iv, ivec);
 | 
			
		||||
			load_block(iv2, ivec + AES_BLOCK_SIZE);
 | 
			
		||||
 | 
			
		||||
			while (len)
 | 
			
		||||
				{
 | 
			
		||||
				load_block(tmp, in);
 | 
			
		||||
				for(n=0 ; n < N_WORDS; ++n)
 | 
			
		||||
					tmp2.data[n] = tmp.data[n] ^ iv.data[n];
 | 
			
		||||
				AES_encrypt((unsigned char *)tmp2.data, (unsigned char *)tmp2.data, key);
 | 
			
		||||
				for(n=0 ; n < N_WORDS; ++n)
 | 
			
		||||
					tmp2.data[n] ^= iv2.data[n];
 | 
			
		||||
				store_block(out, tmp2);
 | 
			
		||||
				iv = tmp2;
 | 
			
		||||
				iv2 = tmp;
 | 
			
		||||
				--len;
 | 
			
		||||
				in += AES_BLOCK_SIZE;
 | 
			
		||||
				out += AES_BLOCK_SIZE;
 | 
			
		||||
				}
 | 
			
		||||
			memcpy(ivec, iv.data, AES_BLOCK_SIZE);
 | 
			
		||||
			memcpy(ivec + AES_BLOCK_SIZE, iv2.data, AES_BLOCK_SIZE);
 | 
			
		||||
			}
 | 
			
		||||
		memcpy(ivec, iv, AES_BLOCK_SIZE);
 | 
			
		||||
		memcpy(ivec + AES_BLOCK_SIZE, iv2, AES_BLOCK_SIZE);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		while (len >= AES_BLOCK_SIZE)
 | 
			
		||||
		if (in != out &&
 | 
			
		||||
		    (UNALIGNED_MEMOPS_ARE_FAST || ((size_t)in|(size_t)out|(size_t)ivec)%sizeof(long)==0))
 | 
			
		||||
			{
 | 
			
		||||
			memcpy(tmp, in, AES_BLOCK_SIZE);
 | 
			
		||||
			memcpy(tmp2, in, AES_BLOCK_SIZE);
 | 
			
		||||
			/*			hexdump(stdout, "in", in, AES_BLOCK_SIZE); */
 | 
			
		||||
			/*			hexdump(stdout, "iv2", iv2, AES_BLOCK_SIZE); */
 | 
			
		||||
			for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
				tmp[n] ^= iv2[n];
 | 
			
		||||
			/*			hexdump(stdout, "in ^ iv2", tmp, AES_BLOCK_SIZE); */
 | 
			
		||||
			AES_decrypt(tmp, out, key);
 | 
			
		||||
			/*			hexdump(stdout, "dec", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			/*			hexdump(stdout, "iv", ivec, AES_BLOCK_SIZE); */
 | 
			
		||||
			for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
				out[n] ^= ivec[n];
 | 
			
		||||
			/*			hexdump(stdout, "out", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			memcpy(ivec, tmp2, AES_BLOCK_SIZE);
 | 
			
		||||
			iv2 = out;
 | 
			
		||||
			len -= AES_BLOCK_SIZE;
 | 
			
		||||
			in += AES_BLOCK_SIZE;
 | 
			
		||||
			out += AES_BLOCK_SIZE;
 | 
			
		||||
			aes_block_t *ivp = (aes_block_t *)ivec;
 | 
			
		||||
			aes_block_t *iv2p = (aes_block_t *)(ivec + AES_BLOCK_SIZE);
 | 
			
		||||
 | 
			
		||||
			while (len)
 | 
			
		||||
				{
 | 
			
		||||
				aes_block_t tmp;
 | 
			
		||||
				aes_block_t *inp = (aes_block_t *)in;
 | 
			
		||||
				aes_block_t *outp = (aes_block_t *)out;
 | 
			
		||||
 | 
			
		||||
				for(n=0 ; n < N_WORDS; ++n)
 | 
			
		||||
					tmp.data[n] = inp->data[n] ^ iv2p->data[n];
 | 
			
		||||
				AES_decrypt((unsigned char *)tmp.data, (unsigned char *)outp->data, key);
 | 
			
		||||
				for(n=0 ; n < N_WORDS; ++n)
 | 
			
		||||
					outp->data[n] ^= ivp->data[n];
 | 
			
		||||
				ivp = inp;
 | 
			
		||||
				iv2p = outp;
 | 
			
		||||
				--len;
 | 
			
		||||
				in += AES_BLOCK_SIZE;
 | 
			
		||||
				out += AES_BLOCK_SIZE;
 | 
			
		||||
				}
 | 
			
		||||
			memcpy(ivec, ivp->data, AES_BLOCK_SIZE);
 | 
			
		||||
			memcpy(ivec + AES_BLOCK_SIZE, iv2p->data, AES_BLOCK_SIZE);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			aes_block_t tmp, tmp2;
 | 
			
		||||
			aes_block_t iv;
 | 
			
		||||
			aes_block_t iv2;
 | 
			
		||||
 | 
			
		||||
			load_block(iv, ivec);
 | 
			
		||||
			load_block(iv2, ivec + AES_BLOCK_SIZE);
 | 
			
		||||
 | 
			
		||||
			while (len)
 | 
			
		||||
				{
 | 
			
		||||
				load_block(tmp, in);
 | 
			
		||||
				tmp2 = tmp;
 | 
			
		||||
				for(n=0 ; n < N_WORDS; ++n)
 | 
			
		||||
					tmp.data[n] ^= iv2.data[n];
 | 
			
		||||
				AES_decrypt((unsigned char *)tmp.data, (unsigned char *)tmp.data, key);
 | 
			
		||||
				for(n=0 ; n < N_WORDS; ++n)
 | 
			
		||||
					tmp.data[n] ^= iv.data[n];
 | 
			
		||||
				store_block(out, tmp);
 | 
			
		||||
				iv = tmp2;
 | 
			
		||||
				iv2 = tmp;
 | 
			
		||||
				--len;
 | 
			
		||||
				in += AES_BLOCK_SIZE;
 | 
			
		||||
				out += AES_BLOCK_SIZE;
 | 
			
		||||
				}
 | 
			
		||||
			memcpy(ivec, iv.data, AES_BLOCK_SIZE);
 | 
			
		||||
			memcpy(ivec + AES_BLOCK_SIZE, iv2.data, AES_BLOCK_SIZE);
 | 
			
		||||
			}
 | 
			
		||||
		memcpy(ivec + AES_BLOCK_SIZE, iv2, AES_BLOCK_SIZE);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -177,17 +238,11 @@ void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
		iv2 = ivec + AES_BLOCK_SIZE;
 | 
			
		||||
		while (len >= AES_BLOCK_SIZE)
 | 
			
		||||
			{
 | 
			
		||||
			/*			hexdump(stdout, "in", in, AES_BLOCK_SIZE); */
 | 
			
		||||
			/*			hexdump(stdout, "iv", iv, AES_BLOCK_SIZE); */
 | 
			
		||||
			for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
				out[n] = in[n] ^ iv[n];
 | 
			
		||||
			/*			hexdump(stdout, "in ^ iv", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			AES_encrypt(out, out, key);
 | 
			
		||||
			/*			hexdump(stdout,"enc", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			/*			hexdump(stdout,"iv2", iv2, AES_BLOCK_SIZE); */
 | 
			
		||||
			for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
				out[n] ^= iv2[n];
 | 
			
		||||
			/*			hexdump(stdout,"out", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			iv = out;
 | 
			
		||||
			memcpy(prev, in, AES_BLOCK_SIZE);
 | 
			
		||||
			iv2 = prev;
 | 
			
		||||
@@ -203,8 +258,6 @@ void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
		while(len >= AES_BLOCK_SIZE)
 | 
			
		||||
			{
 | 
			
		||||
			out -= AES_BLOCK_SIZE;
 | 
			
		||||
			/*			hexdump(stdout, "intermediate", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			/*			hexdump(stdout, "iv", iv, AES_BLOCK_SIZE); */
 | 
			
		||||
			/* XXX: reduce copies by alternating between buffers */
 | 
			
		||||
			memcpy(tmp, out, AES_BLOCK_SIZE);
 | 
			
		||||
			for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
@@ -235,17 +288,11 @@ void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
			out -= AES_BLOCK_SIZE;
 | 
			
		||||
			memcpy(tmp, in, AES_BLOCK_SIZE);
 | 
			
		||||
			memcpy(tmp2, in, AES_BLOCK_SIZE);
 | 
			
		||||
			/*			hexdump(stdout, "in", in, AES_BLOCK_SIZE); */
 | 
			
		||||
			/*			hexdump(stdout, "iv2", iv2, AES_BLOCK_SIZE); */
 | 
			
		||||
			for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
				tmp[n] ^= iv2[n];
 | 
			
		||||
			/*			hexdump(stdout, "in ^ iv2", tmp, AES_BLOCK_SIZE); */
 | 
			
		||||
			AES_decrypt(tmp, out, key);
 | 
			
		||||
			/*			hexdump(stdout, "dec", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			/*			hexdump(stdout, "iv", iv, AES_BLOCK_SIZE); */
 | 
			
		||||
			for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
				out[n] ^= iv[n];
 | 
			
		||||
			/*			hexdump(stdout, "out", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			memcpy(tmp3, tmp2, AES_BLOCK_SIZE);
 | 
			
		||||
			iv = tmp3;
 | 
			
		||||
			iv2 = out;
 | 
			
		||||
@@ -260,17 +307,11 @@ void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
			{
 | 
			
		||||
			memcpy(tmp, out, AES_BLOCK_SIZE);
 | 
			
		||||
			memcpy(tmp2, out, AES_BLOCK_SIZE);
 | 
			
		||||
			/*			hexdump(stdout, "intermediate", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			/*			hexdump(stdout, "iv2", iv2, AES_BLOCK_SIZE); */
 | 
			
		||||
			for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
				tmp[n] ^= iv2[n];
 | 
			
		||||
			/*			hexdump(stdout, "out ^ iv2", tmp, AES_BLOCK_SIZE); */
 | 
			
		||||
			AES_decrypt(tmp, out, key);
 | 
			
		||||
			/*			hexdump(stdout, "dec", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			/*			hexdump(stdout, "iv", ivec, AES_BLOCK_SIZE); */
 | 
			
		||||
			for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
				out[n] ^= iv[n];
 | 
			
		||||
			/*			hexdump(stdout, "out", out, AES_BLOCK_SIZE); */
 | 
			
		||||
			memcpy(tmp3, tmp2, AES_BLOCK_SIZE);
 | 
			
		||||
			iv = tmp3;
 | 
			
		||||
			iv2 = out;
 | 
			
		||||
@@ -278,6 +319,5 @@ void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
			in += AES_BLOCK_SIZE;
 | 
			
		||||
			out += AES_BLOCK_SIZE;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1071
									
								
								crypto/aes/asm/aes-s390x.pl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1071
									
								
								crypto/aes/asm/aes-s390x.pl
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2498
									
								
								crypto/aes/asm/aes-x86_64.pl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2498
									
								
								crypto/aes/asm/aes-x86_64.pl
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -63,7 +63,7 @@ pk:	pk.c
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
@@ -142,9 +142,9 @@ a_digest.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 | 
			
		||||
a_digest.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
a_digest.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
a_digest.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
a_digest.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
a_digest.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
a_digest.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
a_digest.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
 | 
			
		||||
a_digest.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
a_digest.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
a_digest.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
a_digest.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
a_digest.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
@@ -250,27 +250,27 @@ a_sign.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
a_sign.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
a_sign.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
a_sign.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
a_sign.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
a_sign.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
a_sign.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
a_sign.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
a_sign.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
a_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
a_sign.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
a_sign.o: ../cryptlib.h a_sign.c
 | 
			
		||||
a_sign.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
 | 
			
		||||
a_sign.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
a_sign.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
a_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
a_sign.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
a_sign.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
a_sign.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
a_sign.o: ../../include/openssl/x509_vfy.h ../cryptlib.h a_sign.c
 | 
			
		||||
a_strex.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
a_strex.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 | 
			
		||||
a_strex.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
a_strex.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
a_strex.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
a_strex.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
a_strex.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
a_strex.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
a_strex.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
a_strex.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
a_strex.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
a_strex.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
a_strex.o: ../cryptlib.h a_strex.c charmap.h
 | 
			
		||||
a_strex.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
 | 
			
		||||
a_strex.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
a_strex.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
a_strex.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
a_strex.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
a_strex.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
a_strex.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
a_strex.o: ../../include/openssl/x509_vfy.h ../cryptlib.h a_strex.c charmap.h
 | 
			
		||||
a_strnid.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
a_strnid.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 | 
			
		||||
a_strnid.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
@@ -317,8 +317,9 @@ a_verify.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
a_verify.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
a_verify.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
a_verify.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
a_verify.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
a_verify.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
a_verify.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
a_verify.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
a_verify.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
a_verify.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
a_verify.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
a_verify.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
@@ -337,8 +338,9 @@ asn1_gen.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
asn1_gen.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
@@ -368,9 +370,9 @@ asn_moid.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
asn_moid.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
@@ -389,23 +391,23 @@ d2i_pr.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
d2i_pr.o: ../cryptlib.h d2i_pr.c
 | 
			
		||||
d2i_pr.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
d2i_pr.o: ../../include/openssl/symhacks.h ../cryptlib.h d2i_pr.c
 | 
			
		||||
d2i_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
d2i_pu.o: ../cryptlib.h d2i_pu.c
 | 
			
		||||
d2i_pu.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
d2i_pu.o: ../../include/openssl/symhacks.h ../cryptlib.h d2i_pu.c
 | 
			
		||||
evp_asn1.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
evp_asn1.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
 | 
			
		||||
evp_asn1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
@@ -441,71 +443,73 @@ i2d_pr.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
i2d_pr.o: ../cryptlib.h i2d_pr.c
 | 
			
		||||
i2d_pr.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
i2d_pr.o: ../../include/openssl/symhacks.h ../cryptlib.h i2d_pr.c
 | 
			
		||||
i2d_pu.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
i2d_pu.o: ../cryptlib.h i2d_pu.c
 | 
			
		||||
i2d_pu.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rsa.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
i2d_pu.o: ../../include/openssl/symhacks.h ../cryptlib.h i2d_pu.c
 | 
			
		||||
n_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/asn1t.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h n_pkey.c
 | 
			
		||||
n_pkey.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
n_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
n_pkey.o: ../cryptlib.h n_pkey.c
 | 
			
		||||
nsseq.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
 | 
			
		||||
nsseq.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 | 
			
		||||
nsseq.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
nsseq.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
nsseq.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
 | 
			
		||||
nsseq.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
nsseq.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
nsseq.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
nsseq.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
nsseq.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
nsseq.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
nsseq.o: ../../include/openssl/x509_vfy.h nsseq.c
 | 
			
		||||
nsseq.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
nsseq.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
nsseq.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
nsseq.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
nsseq.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
nsseq.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
nsseq.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h nsseq.c
 | 
			
		||||
p5_pbe.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
p5_pbe.o: ../cryptlib.h p5_pbe.c
 | 
			
		||||
p5_pbe.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
p5_pbe.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p5_pbe.c
 | 
			
		||||
p5_pbev2.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
 | 
			
		||||
p5_pbev2.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
@@ -518,41 +522,42 @@ p8_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h p8_pkey.c
 | 
			
		||||
p8_pkey.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
p8_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
p8_pkey.o: ../cryptlib.h p8_pkey.c
 | 
			
		||||
t_bitst.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
 | 
			
		||||
t_bitst.o: ../cryptlib.h t_bitst.c
 | 
			
		||||
t_bitst.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
t_bitst.o: ../../include/openssl/x509v3.h ../cryptlib.h t_bitst.c
 | 
			
		||||
t_crl.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
t_crl.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
t_crl.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
t_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
t_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
t_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
t_crl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_crl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
t_crl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
t_crl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
t_crl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
t_crl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
t_crl.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
 | 
			
		||||
t_crl.o: ../cryptlib.h t_crl.c
 | 
			
		||||
t_crl.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
t_crl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
t_crl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
t_crl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
t_crl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
t_crl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
t_crl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
t_crl.o: ../../include/openssl/x509v3.h ../cryptlib.h t_crl.c
 | 
			
		||||
t_pkey.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
t_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
 | 
			
		||||
@@ -570,57 +575,57 @@ t_req.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
t_req.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
t_req.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
t_req.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
t_req.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
t_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
t_req.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
t_req.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
t_req.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
t_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
t_req.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
t_req.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
 | 
			
		||||
t_req.o: ../cryptlib.h t_req.c
 | 
			
		||||
t_req.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
 | 
			
		||||
t_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
t_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
t_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
t_req.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
t_req.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
t_req.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
t_req.o: ../../include/openssl/x509v3.h ../cryptlib.h t_req.c
 | 
			
		||||
t_spki.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
t_spki.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
t_spki.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
 | 
			
		||||
t_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
t_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
t_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
t_spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
t_spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
t_spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
t_spki.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
t_spki.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
t_spki.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
t_spki.o: ../cryptlib.h t_spki.c
 | 
			
		||||
t_spki.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
t_spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
t_spki.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
t_spki.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
t_spki.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
t_spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
t_spki.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
t_spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h t_spki.c
 | 
			
		||||
t_x509.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
t_x509.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
t_x509.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
t_x509.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
t_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
t_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
t_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
t_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
t_x509.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
t_x509.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
t_x509.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
 | 
			
		||||
t_x509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
t_x509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
t_x509.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
 | 
			
		||||
t_x509.o: ../cryptlib.h t_x509.c
 | 
			
		||||
t_x509.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
 | 
			
		||||
t_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
t_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
t_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
t_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
t_x509.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
t_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
t_x509.o: ../../include/openssl/x509v3.h ../cryptlib.h t_x509.c
 | 
			
		||||
t_x509a.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
t_x509a.o: ../cryptlib.h t_x509a.c
 | 
			
		||||
t_x509a.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
t_x509a.o: ../../include/openssl/x509_vfy.h ../cryptlib.h t_x509a.c
 | 
			
		||||
tasn_dec.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
 | 
			
		||||
tasn_dec.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 | 
			
		||||
tasn_dec.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
@@ -673,21 +678,23 @@ x_algor.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 | 
			
		||||
x_algor.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_algor.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_algor.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
 | 
			
		||||
x_algor.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_algor.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_algor.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_algor.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_algor.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_algor.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_algor.o: ../../include/openssl/x509_vfy.h x_algor.c
 | 
			
		||||
x_algor.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_algor.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_algor.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_algor.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_algor.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_algor.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_algor.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_algor.o: x_algor.c
 | 
			
		||||
x_attrib.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_attrib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
@@ -708,37 +715,40 @@ x_crl.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_crl.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_crl.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_crl.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_crl.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_crl.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_crl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_crl.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_crl.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_crl.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_crl.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_crl.c
 | 
			
		||||
x_crl.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_crl.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_crl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_crl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_crl.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_crl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_crl.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_crl.o: ../cryptlib.h x_crl.c
 | 
			
		||||
x_exten.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
 | 
			
		||||
x_exten.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
 | 
			
		||||
x_exten.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_exten.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_exten.o: ../../include/openssl/ecdsa.h ../../include/openssl/evp.h
 | 
			
		||||
x_exten.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_exten.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_exten.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_exten.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_exten.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_exten.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_exten.o: ../../include/openssl/x509_vfy.h x_exten.c
 | 
			
		||||
x_exten.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_exten.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_exten.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_exten.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_exten.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_exten.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_exten.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_exten.o: x_exten.c
 | 
			
		||||
x_info.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
 | 
			
		||||
x_info.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_info.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_info.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_info.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_info.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_info.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_info.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_info.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_info.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_info.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_info.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_info.c
 | 
			
		||||
x_info.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_info.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_info.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_info.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_info.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_info.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_info.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_info.o: ../cryptlib.h x_info.c
 | 
			
		||||
x_long.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_long.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_long.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
@@ -754,35 +764,37 @@ x_name.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_name.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_name.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_name.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_name.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_name.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_name.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_name.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_name.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_name.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_name.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_name.c
 | 
			
		||||
x_name.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_name.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_name.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_name.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_name.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_name.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_name.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_name.o: ../cryptlib.h x_name.c
 | 
			
		||||
x_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_pkey.c
 | 
			
		||||
x_pkey.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_pkey.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_pkey.o: ../cryptlib.h x_pkey.c
 | 
			
		||||
x_pubkey.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
 | 
			
		||||
x_pubkey.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
@@ -795,76 +807,82 @@ x_req.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_req.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_req.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_req.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_req.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_req.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_req.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_req.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_req.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_req.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_req.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_req.c
 | 
			
		||||
x_req.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_req.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_req.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_req.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_req.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_req.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_req.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_req.o: ../cryptlib.h x_req.c
 | 
			
		||||
x_sig.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_sig.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_sig.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_sig.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_sig.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_sig.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_sig.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_sig.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_sig.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_sig.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_sig.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_sig.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_sig.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_sig.c
 | 
			
		||||
x_sig.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_sig.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_sig.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_sig.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_sig.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_sig.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_sig.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_sig.o: ../cryptlib.h x_sig.c
 | 
			
		||||
x_spki.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_spki.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_spki.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_spki.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_spki.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_spki.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_spki.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_spki.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_spki.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_spki.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_spki.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_spki.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_spki.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_spki.c
 | 
			
		||||
x_spki.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_spki.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_spki.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_spki.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_spki.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_spki.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_spki.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_spki.o: ../cryptlib.h x_spki.c
 | 
			
		||||
x_val.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_val.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_val.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_val.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_val.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_val.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_val.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_val.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_val.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_val.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_val.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_val.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_val.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_val.c
 | 
			
		||||
x_val.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_val.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_val.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_val.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_val.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_val.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_val.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_val.o: ../cryptlib.h x_val.c
 | 
			
		||||
x_x509.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_x509.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_x509.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
 | 
			
		||||
x_x509.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
x_x509.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
x_x509.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
x_x509.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
x_x509.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_x509.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_x509.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_x509.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_x509.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_x509.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_x509.o: ../../include/openssl/x509v3.h ../cryptlib.h x_x509.c
 | 
			
		||||
x_x509.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
 | 
			
		||||
x_x509.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_x509.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_x509.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_x509.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_x509.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_x509.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_x509.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
 | 
			
		||||
x_x509.o: ../cryptlib.h x_x509.c
 | 
			
		||||
x_x509a.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_x509a.c
 | 
			
		||||
x_x509a.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
x_x509a.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
 | 
			
		||||
x_x509a.o: ../cryptlib.h x_x509a.c
 | 
			
		||||
 
 | 
			
		||||
@@ -149,7 +149,7 @@ static int do_create(char *value, char *name)
 | 
			
		||||
		if (lntmp == NULL)
 | 
			
		||||
			return 0;
 | 
			
		||||
		memcpy(lntmp, ln, p - ln);
 | 
			
		||||
		lntmp[p - ln + 1] = 0;
 | 
			
		||||
		lntmp[p - ln] = 0;
 | 
			
		||||
		oid = OBJ_nid2obj(nid);
 | 
			
		||||
		oid->ln = lntmp;
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -160,40 +160,40 @@ static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long len
 | 
			
		||||
					int tag, int aclass, char opt, ASN1_TLC *ctx)
 | 
			
		||||
{
 | 
			
		||||
	const unsigned char *p = *in, *q;
 | 
			
		||||
	STACK *intname = NULL, **intname_pp = &intname;
 | 
			
		||||
	union { STACK *s; ASN1_VALUE *a; } intname = {NULL};
 | 
			
		||||
	union { X509_NAME *x; ASN1_VALUE *a; } nm = {NULL};
 | 
			
		||||
	int i, j, ret;
 | 
			
		||||
	X509_NAME *nm = NULL, **nm_pp = &nm;
 | 
			
		||||
	STACK_OF(X509_NAME_ENTRY) *entries;
 | 
			
		||||
	X509_NAME_ENTRY *entry;
 | 
			
		||||
	q = p;
 | 
			
		||||
 | 
			
		||||
	/* Get internal representation of Name */
 | 
			
		||||
	ret = ASN1_item_ex_d2i((ASN1_VALUE **)intname_pp,
 | 
			
		||||
	ret = ASN1_item_ex_d2i(&intname.a,
 | 
			
		||||
			       &p, len, ASN1_ITEM_rptr(X509_NAME_INTERNAL),
 | 
			
		||||
			       tag, aclass, opt, ctx);
 | 
			
		||||
	
 | 
			
		||||
	if(ret <= 0) return ret;
 | 
			
		||||
 | 
			
		||||
	if(*val) x509_name_ex_free(val, NULL);
 | 
			
		||||
	if(!x509_name_ex_new((ASN1_VALUE **)nm_pp, NULL)) goto err;
 | 
			
		||||
	if(!x509_name_ex_new(&nm.a, NULL)) goto err;
 | 
			
		||||
	/* We've decoded it: now cache encoding */
 | 
			
		||||
	if(!BUF_MEM_grow(nm->bytes, p - q)) goto err;
 | 
			
		||||
	memcpy(nm->bytes->data, q, p - q);
 | 
			
		||||
	if(!BUF_MEM_grow(nm.x->bytes, p - q)) goto err;
 | 
			
		||||
	memcpy(nm.x->bytes->data, q, p - q);
 | 
			
		||||
 | 
			
		||||
	/* Convert internal representation to X509_NAME structure */
 | 
			
		||||
	for(i = 0; i < sk_num(intname); i++) {
 | 
			
		||||
		entries = (STACK_OF(X509_NAME_ENTRY) *)sk_value(intname, i);
 | 
			
		||||
	for(i = 0; i < sk_num(intname.s); i++) {
 | 
			
		||||
		entries = (STACK_OF(X509_NAME_ENTRY) *)sk_value(intname.s, i);
 | 
			
		||||
		for(j = 0; j < sk_X509_NAME_ENTRY_num(entries); j++) {
 | 
			
		||||
			entry = sk_X509_NAME_ENTRY_value(entries, j);
 | 
			
		||||
			entry->set = i;
 | 
			
		||||
			if(!sk_X509_NAME_ENTRY_push(nm->entries, entry))
 | 
			
		||||
			if(!sk_X509_NAME_ENTRY_push(nm.x->entries, entry))
 | 
			
		||||
				goto err;
 | 
			
		||||
		}
 | 
			
		||||
		sk_X509_NAME_ENTRY_free(entries);
 | 
			
		||||
	}
 | 
			
		||||
	sk_free(intname);
 | 
			
		||||
	nm->modified = 0;
 | 
			
		||||
	*val = (ASN1_VALUE *)nm;
 | 
			
		||||
	sk_free(intname.s);
 | 
			
		||||
	nm.x->modified = 0;
 | 
			
		||||
	*val = nm.a;
 | 
			
		||||
	*in = p;
 | 
			
		||||
	return ret;
 | 
			
		||||
	err:
 | 
			
		||||
@@ -219,35 +219,35 @@ static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out, const ASN1_IT
 | 
			
		||||
 | 
			
		||||
static int x509_name_encode(X509_NAME *a)
 | 
			
		||||
{
 | 
			
		||||
	STACK *intname = NULL, **intname_pp = &intname;
 | 
			
		||||
	union { STACK *s; ASN1_VALUE *a; } intname = {NULL};
 | 
			
		||||
	int len;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	STACK_OF(X509_NAME_ENTRY) *entries = NULL;
 | 
			
		||||
	X509_NAME_ENTRY *entry;
 | 
			
		||||
	int i, set = -1;
 | 
			
		||||
	intname = sk_new_null();
 | 
			
		||||
	if(!intname) goto memerr;
 | 
			
		||||
	intname.s = sk_new_null();
 | 
			
		||||
	if(!intname.s) goto memerr;
 | 
			
		||||
	for(i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) {
 | 
			
		||||
		entry = sk_X509_NAME_ENTRY_value(a->entries, i);
 | 
			
		||||
		if(entry->set != set) {
 | 
			
		||||
			entries = sk_X509_NAME_ENTRY_new_null();
 | 
			
		||||
			if(!entries) goto memerr;
 | 
			
		||||
			if(!sk_push(intname, (char *)entries)) goto memerr;
 | 
			
		||||
			if(!sk_push(intname.s, (char *)entries)) goto memerr;
 | 
			
		||||
			set = entry->set;
 | 
			
		||||
		}
 | 
			
		||||
		if(!sk_X509_NAME_ENTRY_push(entries, entry)) goto memerr;
 | 
			
		||||
	}
 | 
			
		||||
	len = ASN1_item_ex_i2d((ASN1_VALUE **)intname_pp, NULL,
 | 
			
		||||
	len = ASN1_item_ex_i2d(&intname.a, NULL,
 | 
			
		||||
			       ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1);
 | 
			
		||||
	if (!BUF_MEM_grow(a->bytes,len)) goto memerr;
 | 
			
		||||
	p=(unsigned char *)a->bytes->data;
 | 
			
		||||
	ASN1_item_ex_i2d((ASN1_VALUE **)intname_pp,
 | 
			
		||||
	ASN1_item_ex_i2d(&intname.a,
 | 
			
		||||
			 &p, ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1);
 | 
			
		||||
	sk_pop_free(intname, sk_internal_free);
 | 
			
		||||
	sk_pop_free(intname.s, sk_internal_free);
 | 
			
		||||
	a->modified = 0;
 | 
			
		||||
	return len;
 | 
			
		||||
	memerr:
 | 
			
		||||
	sk_pop_free(intname, sk_internal_free);
 | 
			
		||||
	sk_pop_free(intname.s, sk_internal_free);
 | 
			
		||||
	ASN1err(ASN1_F_X509_NAME_ENCODE, ERR_R_MALLOC_FAILURE);
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ top:
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
@@ -103,5 +103,9 @@ bf_enc.o: ../../include/openssl/blowfish.h ../../include/openssl/e_os2.h
 | 
			
		||||
bf_enc.o: ../../include/openssl/opensslconf.h bf_enc.c bf_locl.h
 | 
			
		||||
bf_ofb64.o: ../../include/openssl/blowfish.h ../../include/openssl/e_os2.h
 | 
			
		||||
bf_ofb64.o: ../../include/openssl/opensslconf.h bf_locl.h bf_ofb64.c
 | 
			
		||||
bf_skey.o: ../../include/openssl/blowfish.h ../../include/openssl/e_os2.h
 | 
			
		||||
bf_skey.o: ../../include/openssl/opensslconf.h bf_locl.h bf_pi.h bf_skey.c
 | 
			
		||||
bf_skey.o: ../../include/openssl/blowfish.h ../../include/openssl/crypto.h
 | 
			
		||||
bf_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/fips.h
 | 
			
		||||
bf_skey.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
bf_skey.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
 | 
			
		||||
bf_skey.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
bf_skey.o: bf_locl.h bf_pi.h bf_skey.c
 | 
			
		||||
 
 | 
			
		||||
@@ -59,10 +59,12 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <openssl/blowfish.h>
 | 
			
		||||
#include <openssl/crypto.h>
 | 
			
		||||
#include <openssl/fips.h>
 | 
			
		||||
#include "bf_locl.h"
 | 
			
		||||
#include "bf_pi.h"
 | 
			
		||||
 | 
			
		||||
void BF_set_key(BF_KEY *key, int len, const unsigned char *data)
 | 
			
		||||
FIPS_NON_FIPS_VCIPHER_Init(BF)
 | 
			
		||||
	{
 | 
			
		||||
	int i;
 | 
			
		||||
	BF_LONG *p,ri,in[2];
 | 
			
		||||
 
 | 
			
		||||
@@ -104,7 +104,9 @@ typedef struct bf_key_st
 | 
			
		||||
	BF_LONG S[4*256];
 | 
			
		||||
	} BF_KEY;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
#ifdef OPENSSL_FIPS 
 | 
			
		||||
void private_BF_set_key(BF_KEY *key, int len, const unsigned char *data);
 | 
			
		||||
#endif
 | 
			
		||||
void BF_set_key(BF_KEY *key, int len, const unsigned char *data);
 | 
			
		||||
 | 
			
		||||
void BF_encrypt(BF_LONG *data,const BF_KEY *key);
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@ top:
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -79,7 +79,7 @@
 | 
			
		||||
#include <openssl/bn.h>         /* To get BN_LLONG properly defined */
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
 | 
			
		||||
#ifdef BN_LLONG
 | 
			
		||||
#if defined(BN_LLONG) || defined(SIXTY_FOUR_BIT)
 | 
			
		||||
# ifndef HAVE_LONG_LONG
 | 
			
		||||
#  define HAVE_LONG_LONG 1
 | 
			
		||||
# endif
 | 
			
		||||
@@ -117,7 +117,7 @@
 | 
			
		||||
 | 
			
		||||
#if HAVE_LONG_LONG
 | 
			
		||||
# if defined(OPENSSL_SYS_WIN32) && !defined(__GNUC__)
 | 
			
		||||
# define LLONG _int64
 | 
			
		||||
# define LLONG __int64
 | 
			
		||||
# else
 | 
			
		||||
# define LLONG long long
 | 
			
		||||
# endif
 | 
			
		||||
 
 | 
			
		||||
@@ -456,9 +456,6 @@ int BIO_sock_init(void)
 | 
			
		||||
		{
 | 
			
		||||
		int err;
 | 
			
		||||
	  
 | 
			
		||||
#ifdef SIGINT
 | 
			
		||||
		signal(SIGINT,(void (*)(int))BIO_sock_cleanup);
 | 
			
		||||
#endif
 | 
			
		||||
		wsa_init_done=1;
 | 
			
		||||
		memset(&wsa_state,0,sizeof(wsa_state));
 | 
			
		||||
		if (WSAStartup(0x0101,&wsa_state)!=0)
 | 
			
		||||
@@ -484,11 +481,6 @@ int BIO_sock_init(void)
 | 
			
		||||
 | 
			
		||||
    if (!wsa_init_done)
 | 
			
		||||
    {
 | 
			
		||||
   
 | 
			
		||||
# ifdef SIGINT
 | 
			
		||||
        signal(SIGINT,(void (*)(int))BIO_sock_cleanup);
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
        wsa_init_done=1;
 | 
			
		||||
        wVerReq = MAKEWORD( 2, 0 );
 | 
			
		||||
        err = WSAStartup(wVerReq,&wsaData);
 | 
			
		||||
@@ -511,7 +503,7 @@ void BIO_sock_cleanup(void)
 | 
			
		||||
		{
 | 
			
		||||
		wsa_init_done=0;
 | 
			
		||||
#ifndef OPENSSL_SYS_WINCE
 | 
			
		||||
		WSACancelBlockingCall();
 | 
			
		||||
		WSACancelBlockingCall();	/* Winsock 1.1 specific */
 | 
			
		||||
#endif
 | 
			
		||||
		WSACleanup();
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -129,8 +129,8 @@ extern "C" {
 | 
			
		||||
/* dgram BIO stuff */
 | 
			
		||||
#define BIO_CTRL_DGRAM_CONNECT       31  /* BIO dgram special */
 | 
			
		||||
#define BIO_CTRL_DGRAM_SET_CONNECTED 32  /* allow for an externally
 | 
			
		||||
										  * connected socket to be
 | 
			
		||||
										  * passed in */ 
 | 
			
		||||
					  * connected socket to be
 | 
			
		||||
					  * passed in */ 
 | 
			
		||||
#define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33 /* setsockopt, essentially */
 | 
			
		||||
#define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34 /* getsockopt, essentially */
 | 
			
		||||
#define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35 /* setsockopt, essentially */
 | 
			
		||||
@@ -146,14 +146,14 @@ extern "C" {
 | 
			
		||||
#define BIO_CTRL_DGRAM_QUERY_MTU          40 /* as kernel for current MTU */
 | 
			
		||||
#define BIO_CTRL_DGRAM_GET_MTU            41 /* get cached value for MTU */
 | 
			
		||||
#define BIO_CTRL_DGRAM_SET_MTU            42 /* set cached value for
 | 
			
		||||
											  * MTU. want to use this
 | 
			
		||||
                                              * if asking the kernel
 | 
			
		||||
                                              * fails */
 | 
			
		||||
					      * MTU. want to use this
 | 
			
		||||
					      * if asking the kernel
 | 
			
		||||
					      * fails */
 | 
			
		||||
 | 
			
		||||
#define BIO_CTRL_DGRAM_MTU_EXCEEDED       43 /* check whether the MTU
 | 
			
		||||
											  * was exceed in the
 | 
			
		||||
											  * previous write
 | 
			
		||||
											  * operation */
 | 
			
		||||
					      * was exceed in the
 | 
			
		||||
					      * previous write
 | 
			
		||||
					      * operation */
 | 
			
		||||
 | 
			
		||||
#define BIO_CTRL_DGRAM_SET_PEER           44 /* Destination for the data */
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,13 +28,13 @@ LIBSRC=	bn_add.c bn_div.c bn_exp.c bn_lib.c bn_ctx.c bn_mul.c bn_mod.c \
 | 
			
		||||
	bn_print.c bn_rand.c bn_shift.c bn_word.c bn_blind.c \
 | 
			
		||||
	bn_kron.c bn_sqrt.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c bn_asm.c \
 | 
			
		||||
	bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c bn_gf2m.c bn_nist.c \
 | 
			
		||||
	bn_depr.c bn_const.c
 | 
			
		||||
	bn_depr.c bn_const.c bn_x931p.c bn_opt.c
 | 
			
		||||
 | 
			
		||||
LIBOBJ=	bn_add.o bn_div.o bn_exp.o bn_lib.o bn_ctx.o bn_mul.o bn_mod.o \
 | 
			
		||||
	bn_print.o bn_rand.o bn_shift.o bn_word.o bn_blind.o \
 | 
			
		||||
	bn_kron.o bn_sqrt.o bn_gcd.o bn_prime.o bn_err.o bn_sqr.o $(BN_ASM) \
 | 
			
		||||
	bn_recp.o bn_mont.o bn_mpi.o bn_exp2.o bn_gf2m.o bn_nist.o \
 | 
			
		||||
	bn_depr.o bn_const.o
 | 
			
		||||
	bn_depr.o bn_const.o bn_x931p.o bn_opt.o
 | 
			
		||||
 | 
			
		||||
SRC= $(LIBSRC)
 | 
			
		||||
 | 
			
		||||
@@ -58,7 +58,7 @@ bnbug: bnbug.c ../../libcrypto.a top
 | 
			
		||||
	cc -g -I../../include bnbug.c -o bnbug ../../libcrypto.a
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
@@ -67,16 +67,22 @@ bn86-elf.s:	asm/bn-586.pl ../perlasm/x86asm.pl
 | 
			
		||||
	(cd asm; $(PERL) bn-586.pl elf $(CFLAGS) > ../$@)
 | 
			
		||||
co86-elf.s:	asm/co-586.pl ../perlasm/x86asm.pl
 | 
			
		||||
	(cd asm; $(PERL) co-586.pl elf $(CFLAGS) > ../$@)
 | 
			
		||||
mo86-elf.s:	asm/x86-mont.pl ../perlasm/x86asm.pl
 | 
			
		||||
	(cd asm; $(PERL) x86-mont.pl elf $(CFLAGS) > ../$@)
 | 
			
		||||
# COFF
 | 
			
		||||
bn86-cof.s: asm/bn-586.pl ../perlasm/x86asm.pl
 | 
			
		||||
	(cd asm; $(PERL) bn-586.pl coff $(CFLAGS) > ../$@)
 | 
			
		||||
co86-cof.s: asm/co-586.pl ../perlasm/x86asm.pl
 | 
			
		||||
	(cd asm; $(PERL) co-586.pl coff $(CFLAGS) > ../$@)
 | 
			
		||||
mo86-cof.s: asm/x86-mont.pl ../perlasm/x86asm.pl
 | 
			
		||||
	(cd asm; $(PERL) x86-mont.pl coff $(CFLAGS) > ../$@)
 | 
			
		||||
# a.out
 | 
			
		||||
bn86-out.s: asm/bn-586.pl ../perlasm/x86asm.pl
 | 
			
		||||
	(cd asm; $(PERL) bn-586.pl a.out $(CFLAGS) > ../$@)
 | 
			
		||||
co86-out.s: asm/co-586.pl ../perlasm/x86asm.pl
 | 
			
		||||
	(cd asm; $(PERL) co-586.pl a.out $(CFLAGS) > ../$@)
 | 
			
		||||
mo86-out.s: asm/x86-mont.pl ../perlasm/x86asm.pl
 | 
			
		||||
	(cd asm; $(PERL) x86-mont.pl a.out $(CFLAGS) > ../$@)
 | 
			
		||||
 | 
			
		||||
sparcv8.o:	asm/sparcv8.S
 | 
			
		||||
	$(CC) $(CFLAGS) -c asm/sparcv8.S
 | 
			
		||||
@@ -91,10 +97,15 @@ bn-mips3.o:	asm/mips3.s
 | 
			
		||||
 | 
			
		||||
x86_64-gcc.o:	asm/x86_64-gcc.c
 | 
			
		||||
	$(CC) $(CFLAGS) -c -o $@ asm/x86_64-gcc.c
 | 
			
		||||
x86_64-mont.s:	asm/x86_64-mont.pl
 | 
			
		||||
	$(PERL) asm/x86_64-mont.pl $@
 | 
			
		||||
 | 
			
		||||
bn-ia64.s:	asm/ia64.S
 | 
			
		||||
	$(CC) $(CFLAGS) -E asm/ia64.S > $@
 | 
			
		||||
 | 
			
		||||
bn-s390x.s:	asm/s390x.S
 | 
			
		||||
	$(CC) $(CFLAGS) -E asm/s390x.S > $@
 | 
			
		||||
 | 
			
		||||
# GNU assembler fails to compile PA-RISC2 modules, insist on calling
 | 
			
		||||
# vendor assembler...
 | 
			
		||||
pa-risc2W.o: asm/pa-risc2W.s
 | 
			
		||||
@@ -109,6 +120,9 @@ aix_ppc32.s: asm/ppc.pl;	$(PERL) asm/ppc.pl $@
 | 
			
		||||
aix_ppc64.s: asm/ppc.pl;	$(PERL) asm/ppc.pl $@
 | 
			
		||||
osx_ppc32.s: asm/ppc.pl;	$(PERL) $< $@
 | 
			
		||||
 | 
			
		||||
# GNU make "catch all"
 | 
			
		||||
%-mont.s:	asm/%-mont.pl;  $(PERL) $< $(CFLAGS) > $@
 | 
			
		||||
 | 
			
		||||
files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
 | 
			
		||||
 | 
			
		||||
@@ -283,6 +297,13 @@ bn_nist.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
bn_nist.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
bn_nist.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
bn_nist.o: ../../include/openssl/symhacks.h ../cryptlib.h bn_lcl.h bn_nist.c
 | 
			
		||||
bn_opt.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
bn_opt.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
bn_opt.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 | 
			
		||||
bn_opt.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
bn_opt.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
bn_opt.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
bn_opt.o: ../../include/openssl/symhacks.h ../cryptlib.h bn_lcl.h bn_opt.c
 | 
			
		||||
bn_prime.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
bn_prime.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
bn_prime.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 | 
			
		||||
@@ -341,3 +362,6 @@ bn_word.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
bn_word.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
bn_word.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
bn_word.o: ../../include/openssl/symhacks.h ../cryptlib.h bn_lcl.h bn_word.c
 | 
			
		||||
bn_x931p.o: ../../include/openssl/bn.h ../../include/openssl/e_os2.h
 | 
			
		||||
bn_x931p.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
bn_x931p.o: ../../include/openssl/ossl_typ.h bn_x931p.c
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										678
									
								
								crypto/bn/asm/s390x.S
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										678
									
								
								crypto/bn/asm/s390x.S
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,678 @@
 | 
			
		||||
.ident "s390x.S, version 1.0"
 | 
			
		||||
// ====================================================================
 | 
			
		||||
// Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
 | 
			
		||||
// project.
 | 
			
		||||
//
 | 
			
		||||
// Rights for redistribution and usage in source and binary forms are
 | 
			
		||||
// granted according to the OpenSSL license. Warranty of any kind is
 | 
			
		||||
// disclaimed.
 | 
			
		||||
// ====================================================================
 | 
			
		||||
 | 
			
		||||
.text
 | 
			
		||||
 | 
			
		||||
#define zero	%r0
 | 
			
		||||
 | 
			
		||||
// BN_ULONG bn_mul_add_words(BN_ULONG *r2,BN_ULONG *r3,int r4,BN_ULONG r5);
 | 
			
		||||
.globl	bn_mul_add_words
 | 
			
		||||
.type	bn_mul_add_words,@function
 | 
			
		||||
.align	4
 | 
			
		||||
bn_mul_add_words:
 | 
			
		||||
	lghi	zero,0		// zero = 0
 | 
			
		||||
	la	%r1,0(%r2)	// put rp aside
 | 
			
		||||
	lghi	%r2,0		// i=0;
 | 
			
		||||
	ltgfr	%r4,%r4
 | 
			
		||||
	bler	%r14		// if (len<=0) return 0;
 | 
			
		||||
 | 
			
		||||
	stmg	%r6,%r10,48(%r15)
 | 
			
		||||
	lghi	%r8,0		// carry = 0
 | 
			
		||||
	srag	%r10,%r4,2	// cnt=len/4
 | 
			
		||||
	jz	.Loop1_madd
 | 
			
		||||
 | 
			
		||||
.Loop4_madd:
 | 
			
		||||
	lg	%r7,0(%r2,%r3)	// ap[i]
 | 
			
		||||
	mlgr	%r6,%r5		// *=w
 | 
			
		||||
	algr	%r7,%r8		// +=carry
 | 
			
		||||
	alcgr	%r6,zero
 | 
			
		||||
	alg	%r7,0(%r2,%r1)	// +=rp[i]
 | 
			
		||||
	alcgr	%r6,zero
 | 
			
		||||
	stg	%r7,0(%r2,%r1)	// rp[i]=
 | 
			
		||||
 | 
			
		||||
	lg	%r9,8(%r2,%r3)
 | 
			
		||||
	mlgr	%r8,%r5
 | 
			
		||||
	algr	%r9,%r6
 | 
			
		||||
	alcgr	%r8,zero
 | 
			
		||||
	alg	%r9,8(%r2,%r1)
 | 
			
		||||
	alcgr	%r8,zero
 | 
			
		||||
	stg	%r9,8(%r2,%r1)
 | 
			
		||||
 | 
			
		||||
	lg	%r7,16(%r2,%r3)
 | 
			
		||||
	mlgr	%r6,%r5
 | 
			
		||||
	algr	%r7,%r8
 | 
			
		||||
	alcgr	%r6,zero
 | 
			
		||||
	alg	%r7,16(%r2,%r1)
 | 
			
		||||
	alcgr	%r6,zero
 | 
			
		||||
	stg	%r7,16(%r2,%r1)
 | 
			
		||||
 | 
			
		||||
	lg	%r9,24(%r2,%r3)
 | 
			
		||||
	mlgr	%r8,%r5
 | 
			
		||||
	algr	%r9,%r6
 | 
			
		||||
	alcgr	%r8,zero
 | 
			
		||||
	alg	%r9,24(%r2,%r1)
 | 
			
		||||
	alcgr	%r8,zero
 | 
			
		||||
	stg	%r9,24(%r2,%r1)
 | 
			
		||||
 | 
			
		||||
	la	%r2,32(%r2)	// i+=4
 | 
			
		||||
	brct	%r10,.Loop4_madd
 | 
			
		||||
 | 
			
		||||
	lghi	%r10,3
 | 
			
		||||
	nr	%r4,%r10	// cnt=len%4
 | 
			
		||||
	jz	.Lend_madd
 | 
			
		||||
 | 
			
		||||
.Loop1_madd:
 | 
			
		||||
	lg	%r7,0(%r2,%r3)	// ap[i]
 | 
			
		||||
	mlgr	%r6,%r5		// *=w
 | 
			
		||||
	algr	%r7,%r8		// +=carry
 | 
			
		||||
	alcgr	%r6,zero
 | 
			
		||||
	alg	%r7,0(%r2,%r1)	// +=rp[i]
 | 
			
		||||
	alcgr	%r6,zero
 | 
			
		||||
	stg	%r7,0(%r2,%r1)	// rp[i]=
 | 
			
		||||
 | 
			
		||||
	lgr	%r8,%r6
 | 
			
		||||
	la	%r2,8(%r2)	// i++
 | 
			
		||||
	brct	%r4,.Loop1_madd
 | 
			
		||||
 | 
			
		||||
.Lend_madd:
 | 
			
		||||
	lgr	%r2,%r8
 | 
			
		||||
	lmg	%r6,%r10,48(%r15)
 | 
			
		||||
	br	%r14
 | 
			
		||||
.size	bn_mul_add_words,.-bn_mul_add_words
 | 
			
		||||
 | 
			
		||||
// BN_ULONG bn_mul_words(BN_ULONG *r2,BN_ULONG *r3,int r4,BN_ULONG r5);
 | 
			
		||||
.globl	bn_mul_words
 | 
			
		||||
.type	bn_mul_words,@function
 | 
			
		||||
.align	4
 | 
			
		||||
bn_mul_words:
 | 
			
		||||
	lghi	zero,0		// zero = 0
 | 
			
		||||
	la	%r1,0(%r2)	// put rp aside
 | 
			
		||||
	lghi	%r2,0		// i=0;
 | 
			
		||||
	ltgfr	%r4,%r4
 | 
			
		||||
	bler	%r14		// if (len<=0) return 0;
 | 
			
		||||
 | 
			
		||||
	stmg	%r6,%r10,48(%r15)
 | 
			
		||||
	lghi	%r8,0		// carry = 0
 | 
			
		||||
	srag	%r10,%r4,2	// cnt=len/4
 | 
			
		||||
	jz	.Loop1_mul
 | 
			
		||||
 | 
			
		||||
.Loop4_mul:
 | 
			
		||||
	lg	%r7,0(%r2,%r3)	// ap[i]
 | 
			
		||||
	mlgr	%r6,%r5		// *=w
 | 
			
		||||
	algr	%r7,%r8		// +=carry
 | 
			
		||||
	alcgr	%r6,zero
 | 
			
		||||
	stg	%r7,0(%r2,%r1)	// rp[i]=
 | 
			
		||||
 | 
			
		||||
	lg	%r9,8(%r2,%r3)
 | 
			
		||||
	mlgr	%r8,%r5
 | 
			
		||||
	algr	%r9,%r6
 | 
			
		||||
	alcgr	%r8,zero
 | 
			
		||||
	stg	%r9,8(%r2,%r1)
 | 
			
		||||
 | 
			
		||||
	lg	%r7,16(%r2,%r3)
 | 
			
		||||
	mlgr	%r6,%r5
 | 
			
		||||
	algr	%r7,%r8
 | 
			
		||||
	alcgr	%r6,zero
 | 
			
		||||
	stg	%r7,16(%r2,%r1)
 | 
			
		||||
 | 
			
		||||
	lg	%r9,24(%r2,%r3)
 | 
			
		||||
	mlgr	%r8,%r5
 | 
			
		||||
	algr	%r9,%r6
 | 
			
		||||
	alcgr	%r8,zero
 | 
			
		||||
	stg	%r9,24(%r2,%r1)
 | 
			
		||||
 | 
			
		||||
	la	%r2,32(%r2)	// i+=4
 | 
			
		||||
	brct	%r10,.Loop4_mul
 | 
			
		||||
 | 
			
		||||
	lghi	%r10,3
 | 
			
		||||
	nr	%r4,%r10	// cnt=len%4
 | 
			
		||||
	jz	.Lend_mul
 | 
			
		||||
 | 
			
		||||
.Loop1_mul:
 | 
			
		||||
	lg	%r7,0(%r2,%r3)	// ap[i]
 | 
			
		||||
	mlgr	%r6,%r5		// *=w
 | 
			
		||||
	algr	%r7,%r8		// +=carry
 | 
			
		||||
	alcgr	%r6,zero
 | 
			
		||||
	stg	%r7,0(%r2,%r1)	// rp[i]=
 | 
			
		||||
 | 
			
		||||
	lgr	%r8,%r6
 | 
			
		||||
	la	%r2,8(%r2)	// i++
 | 
			
		||||
	brct	%r4,.Loop1_mul
 | 
			
		||||
 | 
			
		||||
.Lend_mul:
 | 
			
		||||
	lgr	%r2,%r8
 | 
			
		||||
	lmg	%r6,%r10,48(%r15)
 | 
			
		||||
	br	%r14
 | 
			
		||||
.size	bn_mul_words,.-bn_mul_words
 | 
			
		||||
 | 
			
		||||
// void bn_sqr_words(BN_ULONG *r2,BN_ULONG *r2,int r4)
 | 
			
		||||
.globl	bn_sqr_words
 | 
			
		||||
.type	bn_sqr_words,@function
 | 
			
		||||
.align	4
 | 
			
		||||
bn_sqr_words:
 | 
			
		||||
	ltgfr	%r4,%r4
 | 
			
		||||
	bler	%r14
 | 
			
		||||
 | 
			
		||||
	stmg	%r6,%r7,48(%r15)
 | 
			
		||||
	srag	%r1,%r4,2	// cnt=len/4
 | 
			
		||||
	jz	.Loop1_sqr
 | 
			
		||||
 | 
			
		||||
.Loop4_sqr:
 | 
			
		||||
	lg	%r7,0(%r3)
 | 
			
		||||
	mlgr	%r6,%r7
 | 
			
		||||
	stg	%r7,0(%r2)
 | 
			
		||||
	stg	%r6,8(%r2)
 | 
			
		||||
 | 
			
		||||
	lg	%r7,8(%r3)
 | 
			
		||||
	mlgr	%r6,%r7
 | 
			
		||||
	stg	%r7,16(%r2)
 | 
			
		||||
	stg	%r6,24(%r2)
 | 
			
		||||
 | 
			
		||||
	lg	%r7,16(%r3)
 | 
			
		||||
	mlgr	%r6,%r7
 | 
			
		||||
	stg	%r7,32(%r2)
 | 
			
		||||
	stg	%r6,40(%r2)
 | 
			
		||||
 | 
			
		||||
	lg	%r7,24(%r3)
 | 
			
		||||
	mlgr	%r6,%r7
 | 
			
		||||
	stg	%r7,48(%r2)
 | 
			
		||||
	stg	%r6,56(%r2)
 | 
			
		||||
 | 
			
		||||
	la	%r3,32(%r3)
 | 
			
		||||
	la	%r2,64(%r2)
 | 
			
		||||
	brct	%r1,.Loop4_sqr
 | 
			
		||||
 | 
			
		||||
	lghi	%r1,3
 | 
			
		||||
	nr	%r4,%r1		// cnt=len%4
 | 
			
		||||
	jz	.Lend_sqr
 | 
			
		||||
 | 
			
		||||
.Loop1_sqr:
 | 
			
		||||
	lg	%r7,0(%r3)
 | 
			
		||||
	mlgr	%r6,%r7
 | 
			
		||||
	stg	%r7,0(%r2)
 | 
			
		||||
	stg	%r6,8(%r2)
 | 
			
		||||
 | 
			
		||||
	la	%r3,8(%r3)
 | 
			
		||||
	la	%r2,16(%r2)
 | 
			
		||||
	brct	%r4,.Loop1_sqr
 | 
			
		||||
 | 
			
		||||
.Lend_sqr:
 | 
			
		||||
	lmg	%r6,%r7,48(%r15)
 | 
			
		||||
	br	%r14
 | 
			
		||||
.size	bn_sqr_words,.-bn_sqr_words
 | 
			
		||||
 | 
			
		||||
// BN_ULONG bn_div_words(BN_ULONG h,BN_ULONG l,BN_ULONG d);
 | 
			
		||||
.globl	bn_div_words
 | 
			
		||||
.type	bn_div_words,@function
 | 
			
		||||
.align	4
 | 
			
		||||
bn_div_words:
 | 
			
		||||
	dlgr	%r2,%r4
 | 
			
		||||
	lgr	%r2,%r3
 | 
			
		||||
	br	%r14
 | 
			
		||||
.size	bn_div_words,.-bn_div_words
 | 
			
		||||
 | 
			
		||||
// BN_ULONG bn_add_words(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4,int r5);
 | 
			
		||||
.globl	bn_add_words
 | 
			
		||||
.type	bn_add_words,@function
 | 
			
		||||
.align	4
 | 
			
		||||
bn_add_words:
 | 
			
		||||
	la	%r1,0(%r2)	// put rp aside
 | 
			
		||||
	lghi	%r2,0		// i=0
 | 
			
		||||
	ltgfr	%r5,%r5
 | 
			
		||||
	bler	%r14		// if (len<=0) return 0;
 | 
			
		||||
 | 
			
		||||
	stg	%r6,48(%r15)
 | 
			
		||||
	lghi	%r6,3
 | 
			
		||||
	nr	%r6,%r5		// len%4
 | 
			
		||||
	sra	%r5,2		// len/4, use sra because it sets condition code
 | 
			
		||||
	jz	.Loop1_add	// carry is incidentally cleared if branch taken
 | 
			
		||||
	algr	%r2,%r2		// clear carry
 | 
			
		||||
 | 
			
		||||
.Loop4_add:
 | 
			
		||||
	lg	%r0,0(%r2,%r3)
 | 
			
		||||
	alcg	%r0,0(%r2,%r4)
 | 
			
		||||
	stg	%r0,0(%r2,%r1)
 | 
			
		||||
	lg	%r0,8(%r2,%r3)
 | 
			
		||||
	alcg	%r0,8(%r2,%r4)
 | 
			
		||||
	stg	%r0,8(%r2,%r1)
 | 
			
		||||
	lg	%r0,16(%r2,%r3)
 | 
			
		||||
	alcg	%r0,16(%r2,%r4)
 | 
			
		||||
	stg	%r0,16(%r2,%r1)
 | 
			
		||||
	lg	%r0,24(%r2,%r3)
 | 
			
		||||
	alcg	%r0,24(%r2,%r4)
 | 
			
		||||
	stg	%r0,24(%r2,%r1)
 | 
			
		||||
 | 
			
		||||
	la	%r2,32(%r2)	// i+=4
 | 
			
		||||
	brct	%r5,.Loop4_add
 | 
			
		||||
 | 
			
		||||
	la	%r6,1(%r6)	// see if len%4 is zero ...
 | 
			
		||||
	brct	%r6,.Loop1_add	// without touching condition code:-)
 | 
			
		||||
 | 
			
		||||
.Lexit_add:
 | 
			
		||||
	lghi	%r2,0
 | 
			
		||||
	alcgr	%r2,%r2
 | 
			
		||||
	lg	%r6,48(%r15)
 | 
			
		||||
	br	%r14
 | 
			
		||||
 | 
			
		||||
.Loop1_add:
 | 
			
		||||
	lg	%r0,0(%r2,%r3)
 | 
			
		||||
	alcg	%r0,0(%r2,%r4)
 | 
			
		||||
	stg	%r0,0(%r2,%r1)
 | 
			
		||||
 | 
			
		||||
	la	%r2,8(%r2)	// i++
 | 
			
		||||
	brct	%r6,.Loop1_add
 | 
			
		||||
 | 
			
		||||
	j	.Lexit_add
 | 
			
		||||
.size	bn_add_words,.-bn_add_words
 | 
			
		||||
 | 
			
		||||
// BN_ULONG bn_sub_words(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4,int r5);
 | 
			
		||||
.globl	bn_sub_words
 | 
			
		||||
.type	bn_sub_words,@function
 | 
			
		||||
.align	4
 | 
			
		||||
bn_sub_words:
 | 
			
		||||
	la	%r1,0(%r2)	// put rp aside
 | 
			
		||||
	lghi	%r2,0		// i=0
 | 
			
		||||
	ltgfr	%r5,%r5
 | 
			
		||||
	bler	%r14		// if (len<=0) return 0;
 | 
			
		||||
 | 
			
		||||
	stg	%r6,48(%r15)
 | 
			
		||||
	lghi	%r6,3
 | 
			
		||||
	nr	%r6,%r5		// len%4
 | 
			
		||||
	sra	%r5,2		// len/4, use sra because it sets condition code
 | 
			
		||||
	jnz	.Loop4_sub	// borrow is incidentally cleared if branch taken
 | 
			
		||||
	slgr	%r2,%r2		// clear borrow
 | 
			
		||||
 | 
			
		||||
.Loop1_sub:
 | 
			
		||||
	lg	%r0,0(%r2,%r3)
 | 
			
		||||
	slbg	%r0,0(%r2,%r4)
 | 
			
		||||
	stg	%r0,0(%r2,%r1)
 | 
			
		||||
 | 
			
		||||
	la	%r2,8(%r2)	// i++
 | 
			
		||||
	brct	%r6,.Loop1_sub
 | 
			
		||||
	j	.Lexit_sub
 | 
			
		||||
 | 
			
		||||
.Loop4_sub:
 | 
			
		||||
	lg	%r0,0(%r2,%r3)
 | 
			
		||||
	slbg	%r0,0(%r2,%r4)
 | 
			
		||||
	stg	%r0,0(%r2,%r1)
 | 
			
		||||
	lg	%r0,8(%r2,%r3)
 | 
			
		||||
	slbg	%r0,8(%r2,%r4)
 | 
			
		||||
	stg	%r0,8(%r2,%r1)
 | 
			
		||||
	lg	%r0,16(%r2,%r3)
 | 
			
		||||
	slbg	%r0,16(%r2,%r4)
 | 
			
		||||
	stg	%r0,16(%r2,%r1)
 | 
			
		||||
	lg	%r0,24(%r2,%r3)
 | 
			
		||||
	slbg	%r0,24(%r2,%r4)
 | 
			
		||||
	stg	%r0,24(%r2,%r1)
 | 
			
		||||
 | 
			
		||||
	la	%r2,32(%r2)	// i+=4
 | 
			
		||||
	brct	%r5,.Loop4_sub
 | 
			
		||||
 | 
			
		||||
	la	%r6,1(%r6)	// see if len%4 is zero ...
 | 
			
		||||
	brct	%r6,.Loop1_sub	// without touching condition code:-)
 | 
			
		||||
 | 
			
		||||
.Lexit_sub:
 | 
			
		||||
	lghi	%r2,0
 | 
			
		||||
	slbgr	%r2,%r2
 | 
			
		||||
	lcgr	%r2,%r2
 | 
			
		||||
	lg	%r6,48(%r15)
 | 
			
		||||
	br	%r14
 | 
			
		||||
.size	bn_sub_words,.-bn_sub_words
 | 
			
		||||
 | 
			
		||||
#define c1	%r1
 | 
			
		||||
#define c2	%r5
 | 
			
		||||
#define c3	%r8
 | 
			
		||||
 | 
			
		||||
#define mul_add_c(ai,bi,c1,c2,c3)	\
 | 
			
		||||
	lg	%r7,ai*8(%r3);		\
 | 
			
		||||
	mlg	%r6,bi*8(%r4);		\
 | 
			
		||||
	algr	c1,%r7;			\
 | 
			
		||||
	alcgr	c2,%r6;			\
 | 
			
		||||
	alcgr	c3,zero
 | 
			
		||||
 | 
			
		||||
// void bn_mul_comba8(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4);
 | 
			
		||||
.globl	bn_mul_comba8
 | 
			
		||||
.type	bn_mul_comba8,@function
 | 
			
		||||
.align	4
 | 
			
		||||
bn_mul_comba8:
 | 
			
		||||
	stmg	%r6,%r8,48(%r15)
 | 
			
		||||
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
	lghi	zero,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(0,0,c1,c2,c3);
 | 
			
		||||
	stg	c1,0*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(0,1,c2,c3,c1);
 | 
			
		||||
	mul_add_c(1,0,c2,c3,c1);
 | 
			
		||||
	stg	c2,1*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(2,0,c3,c1,c2);
 | 
			
		||||
	mul_add_c(1,1,c3,c1,c2);
 | 
			
		||||
	mul_add_c(0,2,c3,c1,c2);
 | 
			
		||||
	stg	c3,2*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(0,3,c1,c2,c3);
 | 
			
		||||
	mul_add_c(1,2,c1,c2,c3);
 | 
			
		||||
	mul_add_c(2,1,c1,c2,c3);
 | 
			
		||||
	mul_add_c(3,0,c1,c2,c3);
 | 
			
		||||
	stg	c1,3*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(4,0,c2,c3,c1);
 | 
			
		||||
	mul_add_c(3,1,c2,c3,c1);
 | 
			
		||||
	mul_add_c(2,2,c2,c3,c1);
 | 
			
		||||
	mul_add_c(1,3,c2,c3,c1);
 | 
			
		||||
	mul_add_c(0,4,c2,c3,c1);
 | 
			
		||||
	stg	c2,4*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(0,5,c3,c1,c2);
 | 
			
		||||
	mul_add_c(1,4,c3,c1,c2);
 | 
			
		||||
	mul_add_c(2,3,c3,c1,c2);
 | 
			
		||||
	mul_add_c(3,2,c3,c1,c2);
 | 
			
		||||
	mul_add_c(4,1,c3,c1,c2);
 | 
			
		||||
	mul_add_c(5,0,c3,c1,c2);
 | 
			
		||||
	stg	c3,5*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(6,0,c1,c2,c3);
 | 
			
		||||
	mul_add_c(5,1,c1,c2,c3);
 | 
			
		||||
	mul_add_c(4,2,c1,c2,c3);
 | 
			
		||||
	mul_add_c(3,3,c1,c2,c3);
 | 
			
		||||
	mul_add_c(2,4,c1,c2,c3);
 | 
			
		||||
	mul_add_c(1,5,c1,c2,c3);
 | 
			
		||||
	mul_add_c(0,6,c1,c2,c3);
 | 
			
		||||
	stg	c1,6*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(0,7,c2,c3,c1);
 | 
			
		||||
	mul_add_c(1,6,c2,c3,c1);
 | 
			
		||||
	mul_add_c(2,5,c2,c3,c1);
 | 
			
		||||
	mul_add_c(3,4,c2,c3,c1);
 | 
			
		||||
	mul_add_c(4,3,c2,c3,c1);
 | 
			
		||||
	mul_add_c(5,2,c2,c3,c1);
 | 
			
		||||
	mul_add_c(6,1,c2,c3,c1);
 | 
			
		||||
	mul_add_c(7,0,c2,c3,c1);
 | 
			
		||||
	stg	c2,7*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(7,1,c3,c1,c2);
 | 
			
		||||
	mul_add_c(6,2,c3,c1,c2);
 | 
			
		||||
	mul_add_c(5,3,c3,c1,c2);
 | 
			
		||||
	mul_add_c(4,4,c3,c1,c2);
 | 
			
		||||
	mul_add_c(3,5,c3,c1,c2);
 | 
			
		||||
	mul_add_c(2,6,c3,c1,c2);
 | 
			
		||||
	mul_add_c(1,7,c3,c1,c2);
 | 
			
		||||
	stg	c3,8*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(2,7,c1,c2,c3);
 | 
			
		||||
	mul_add_c(3,6,c1,c2,c3);
 | 
			
		||||
	mul_add_c(4,5,c1,c2,c3);
 | 
			
		||||
	mul_add_c(5,4,c1,c2,c3);
 | 
			
		||||
	mul_add_c(6,3,c1,c2,c3);
 | 
			
		||||
	mul_add_c(7,2,c1,c2,c3);
 | 
			
		||||
	stg	c1,9*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(7,3,c2,c3,c1);
 | 
			
		||||
	mul_add_c(6,4,c2,c3,c1);
 | 
			
		||||
	mul_add_c(5,5,c2,c3,c1);
 | 
			
		||||
	mul_add_c(4,6,c2,c3,c1);
 | 
			
		||||
	mul_add_c(3,7,c2,c3,c1);
 | 
			
		||||
	stg	c2,10*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(4,7,c3,c1,c2);
 | 
			
		||||
	mul_add_c(5,6,c3,c1,c2);
 | 
			
		||||
	mul_add_c(6,5,c3,c1,c2);
 | 
			
		||||
	mul_add_c(7,4,c3,c1,c2);
 | 
			
		||||
	stg	c3,11*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(7,5,c1,c2,c3);
 | 
			
		||||
	mul_add_c(6,6,c1,c2,c3);
 | 
			
		||||
	mul_add_c(5,7,c1,c2,c3);
 | 
			
		||||
	stg	c1,12*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	mul_add_c(6,7,c2,c3,c1);
 | 
			
		||||
	mul_add_c(7,6,c2,c3,c1);
 | 
			
		||||
	stg	c2,13*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(7,7,c3,c1,c2);
 | 
			
		||||
	stg	c3,14*8(%r2)
 | 
			
		||||
	stg	c1,15*8(%r2)
 | 
			
		||||
 | 
			
		||||
	lmg	%r6,%r8,48(%r15)
 | 
			
		||||
	br	%r14
 | 
			
		||||
.size	bn_mul_comba8,.-bn_mul_comba8
 | 
			
		||||
 | 
			
		||||
// void bn_mul_comba4(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4);
 | 
			
		||||
.globl	bn_mul_comba4
 | 
			
		||||
.type	bn_mul_comba4,@function
 | 
			
		||||
.align	4
 | 
			
		||||
bn_mul_comba4:
 | 
			
		||||
	stmg	%r6,%r8,48(%r15)
 | 
			
		||||
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
	lghi	zero,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(0,0,c1,c2,c3);
 | 
			
		||||
	stg	c1,0*8(%r3)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(0,1,c2,c3,c1);
 | 
			
		||||
	mul_add_c(1,0,c2,c3,c1);
 | 
			
		||||
	stg	c2,1*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(2,0,c3,c1,c2);
 | 
			
		||||
	mul_add_c(1,1,c3,c1,c2);
 | 
			
		||||
	mul_add_c(0,2,c3,c1,c2);
 | 
			
		||||
	stg	c3,2*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(0,3,c1,c2,c3);
 | 
			
		||||
	mul_add_c(1,2,c1,c2,c3);
 | 
			
		||||
	mul_add_c(2,1,c1,c2,c3);
 | 
			
		||||
	mul_add_c(3,0,c1,c2,c3);
 | 
			
		||||
	stg	c1,3*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(3,1,c2,c3,c1);
 | 
			
		||||
	mul_add_c(2,2,c2,c3,c1);
 | 
			
		||||
	mul_add_c(1,3,c2,c3,c1);
 | 
			
		||||
	stg	c2,4*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(2,3,c3,c1,c2);
 | 
			
		||||
	mul_add_c(3,2,c3,c1,c2);
 | 
			
		||||
	stg	c3,5*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	mul_add_c(3,3,c1,c2,c3);
 | 
			
		||||
	stg	c1,6*8(%r2)
 | 
			
		||||
	stg	c2,7*8(%r2)
 | 
			
		||||
 | 
			
		||||
	stmg	%r6,%r8,48(%r15)
 | 
			
		||||
	br	%r14
 | 
			
		||||
.size	bn_mul_comba4,.-bn_mul_comba4
 | 
			
		||||
 | 
			
		||||
#define sqr_add_c(ai,c1,c2,c3)		\
 | 
			
		||||
	lg	%r7,ai*8(%r3);		\
 | 
			
		||||
	mlgr	%r6,%r7;		\
 | 
			
		||||
	algr	c1,%r7;			\
 | 
			
		||||
	alcgr	c2,%r6;			\
 | 
			
		||||
	alcgr	c3,zero
 | 
			
		||||
 | 
			
		||||
#define sqr_add_c2(ai,aj,c1,c2,c3)	\
 | 
			
		||||
	lg	%r7,ai*8(%r3);		\
 | 
			
		||||
	mlg	%r6,aj*8(%r3);		\
 | 
			
		||||
	algr	c1,%r7;			\
 | 
			
		||||
	alcgr	c2,%r6;			\
 | 
			
		||||
	alcgr	c3,zero;		\
 | 
			
		||||
	algr	c1,%r7;			\
 | 
			
		||||
	alcgr	c2,%r6;			\
 | 
			
		||||
	alcgr	c3,zero
 | 
			
		||||
 | 
			
		||||
// void bn_sqr_comba8(BN_ULONG *r2,BN_ULONG *r3);
 | 
			
		||||
.globl	bn_sqr_comba8
 | 
			
		||||
.type	bn_sqr_comba8,@function
 | 
			
		||||
.align	4
 | 
			
		||||
bn_sqr_comba8:
 | 
			
		||||
	stmg	%r6,%r8,48(%r15)
 | 
			
		||||
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
	lghi	zero,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(0,c1,c2,c3);
 | 
			
		||||
	stg	c1,0*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c2(1,0,c2,c3,c1);
 | 
			
		||||
	stg	c2,1*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(1,c3,c1,c2);
 | 
			
		||||
	sqr_add_c2(2,0,c3,c1,c2);
 | 
			
		||||
	stg	c3,2*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c2(3,0,c1,c2,c3);
 | 
			
		||||
	sqr_add_c2(2,1,c1,c2,c3);
 | 
			
		||||
	stg	c1,3*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(2,c2,c3,c1);
 | 
			
		||||
	sqr_add_c2(3,1,c2,c3,c1);
 | 
			
		||||
	sqr_add_c2(4,0,c2,c3,c1);
 | 
			
		||||
	stg	c2,4*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c2(5,0,c3,c1,c2);
 | 
			
		||||
	sqr_add_c2(4,1,c3,c1,c2);
 | 
			
		||||
	sqr_add_c2(3,2,c3,c1,c2);
 | 
			
		||||
	stg	c3,5*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(3,c1,c2,c3);
 | 
			
		||||
	sqr_add_c2(4,2,c1,c2,c3);
 | 
			
		||||
	sqr_add_c2(5,1,c1,c2,c3);
 | 
			
		||||
	sqr_add_c2(6,0,c1,c2,c3);
 | 
			
		||||
	stg	c1,6*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c2(7,0,c2,c3,c1);
 | 
			
		||||
	sqr_add_c2(6,1,c2,c3,c1);
 | 
			
		||||
	sqr_add_c2(5,2,c2,c3,c1);
 | 
			
		||||
	sqr_add_c2(4,3,c2,c3,c1);
 | 
			
		||||
	stg	c2,7*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(4,c3,c1,c2);
 | 
			
		||||
	sqr_add_c2(5,3,c3,c1,c2);
 | 
			
		||||
	sqr_add_c2(6,2,c3,c1,c2);
 | 
			
		||||
	sqr_add_c2(7,1,c3,c1,c2);
 | 
			
		||||
	stg	c3,8*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c2(7,2,c1,c2,c3);
 | 
			
		||||
	sqr_add_c2(6,3,c1,c2,c3);
 | 
			
		||||
	sqr_add_c2(5,4,c1,c2,c3);
 | 
			
		||||
	stg	c1,9*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(5,c2,c3,c1);
 | 
			
		||||
	sqr_add_c2(6,4,c2,c3,c1);
 | 
			
		||||
	sqr_add_c2(7,3,c2,c3,c1);
 | 
			
		||||
	stg	c2,10*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c2(7,4,c3,c1,c2);
 | 
			
		||||
	sqr_add_c2(6,5,c3,c1,c2);
 | 
			
		||||
	stg	c3,11*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(6,c1,c2,c3);
 | 
			
		||||
	sqr_add_c2(7,5,c1,c2,c3);
 | 
			
		||||
	stg	c1,12*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c2(7,6,c2,c3,c1);
 | 
			
		||||
	stg	c2,13*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(7,c3,c1,c2);
 | 
			
		||||
	stg	c3,14*8(%r2)
 | 
			
		||||
	stg	c1,15*8(%r2)
 | 
			
		||||
 | 
			
		||||
	lmg	%r6,%r8,48(%r15)
 | 
			
		||||
	br	%r14
 | 
			
		||||
.size	bn_sqr_comba8,.-bn_sqr_comba8
 | 
			
		||||
 | 
			
		||||
// void bn_sqr_comba4(BN_ULONG *r2,BN_ULONG *r3);
 | 
			
		||||
.globl bn_sqr_comba4
 | 
			
		||||
.type	bn_sqr_comba4,@function
 | 
			
		||||
.align	4
 | 
			
		||||
bn_sqr_comba4:
 | 
			
		||||
	stmg	%r6,%r8,48(%r15)
 | 
			
		||||
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
	lghi	zero,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(0,c1,c2,c3);
 | 
			
		||||
	stg	c1,0*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c2(1,0,c2,c3,c1);
 | 
			
		||||
	stg	c2,1*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(1,c3,c1,c2);
 | 
			
		||||
	sqr_add_c2(2,0,c3,c1,c2);
 | 
			
		||||
	stg	c3,2*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c2(3,0,c1,c2,c3);
 | 
			
		||||
	sqr_add_c2(2,1,c1,c2,c3);
 | 
			
		||||
	stg	c1,3*8(%r2)
 | 
			
		||||
	lghi	c1,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(2,c2,c3,c1);
 | 
			
		||||
	sqr_add_c2(3,1,c2,c3,c1);
 | 
			
		||||
	stg	c2,4*8(%r2)
 | 
			
		||||
	lghi	c2,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c2(3,2,c3,c1,c2);
 | 
			
		||||
	stg	c3,5*8(%r2)
 | 
			
		||||
	lghi	c3,0
 | 
			
		||||
 | 
			
		||||
	sqr_add_c(3,c1,c2,c3);
 | 
			
		||||
	stg	c1,6*8(%r2)
 | 
			
		||||
	stg	c2,7*8(%r2)
 | 
			
		||||
 | 
			
		||||
	lmg	%r6,%r8,48(%r15)
 | 
			
		||||
	br	%r14
 | 
			
		||||
.size	bn_sqr_comba4,.-bn_sqr_comba4
 | 
			
		||||
							
								
								
									
										591
									
								
								crypto/bn/asm/x86-mont.pl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										591
									
								
								crypto/bn/asm/x86-mont.pl
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,591 @@
 | 
			
		||||
#!/usr/bin/env perl
 | 
			
		||||
 | 
			
		||||
# ====================================================================
 | 
			
		||||
# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
 | 
			
		||||
# project. The module is, however, dual licensed under OpenSSL and
 | 
			
		||||
# CRYPTOGAMS licenses depending on where you obtain it. For further
 | 
			
		||||
# details see http://www.openssl.org/~appro/cryptogams/.
 | 
			
		||||
# ====================================================================
 | 
			
		||||
 | 
			
		||||
# October 2005
 | 
			
		||||
#
 | 
			
		||||
# This is a "teaser" code, as it can be improved in several ways...
 | 
			
		||||
# First of all non-SSE2 path should be implemented (yes, for now it
 | 
			
		||||
# performs Montgomery multiplication/convolution only on SSE2-capable
 | 
			
		||||
# CPUs such as P4, others fall down to original code). Then inner loop
 | 
			
		||||
# can be unrolled and modulo-scheduled to improve ILP and possibly
 | 
			
		||||
# moved to 128-bit XMM register bank (though it would require input
 | 
			
		||||
# rearrangement and/or increase bus bandwidth utilization). Dedicated
 | 
			
		||||
# squaring procedure should give further performance improvement...
 | 
			
		||||
# Yet, for being draft, the code improves rsa512 *sign* benchmark by
 | 
			
		||||
# 110%(!), rsa1024 one - by 70% and rsa4096 - by 20%:-)
 | 
			
		||||
 | 
			
		||||
# December 2006
 | 
			
		||||
#
 | 
			
		||||
# Modulo-scheduling SSE2 loops results in further 15-20% improvement.
 | 
			
		||||
# Integer-only code [being equipped with dedicated squaring procedure]
 | 
			
		||||
# gives ~40% on rsa512 sign benchmark...
 | 
			
		||||
 | 
			
		||||
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
 | 
			
		||||
push(@INC,"${dir}","${dir}../../perlasm");
 | 
			
		||||
require "x86asm.pl";
 | 
			
		||||
 | 
			
		||||
&asm_init($ARGV[0],$0);
 | 
			
		||||
 | 
			
		||||
$sse2=0;
 | 
			
		||||
for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
 | 
			
		||||
 | 
			
		||||
&external_label("OPENSSL_ia32cap_P") if ($sse2);
 | 
			
		||||
 | 
			
		||||
&function_begin("bn_mul_mont");
 | 
			
		||||
 | 
			
		||||
$i="edx";
 | 
			
		||||
$j="ecx";
 | 
			
		||||
$ap="esi";	$tp="esi";		# overlapping variables!!!
 | 
			
		||||
$rp="edi";	$bp="edi";		# overlapping variables!!!
 | 
			
		||||
$np="ebp";
 | 
			
		||||
$num="ebx";
 | 
			
		||||
 | 
			
		||||
$_num=&DWP(4*0,"esp");			# stack top layout
 | 
			
		||||
$_rp=&DWP(4*1,"esp");
 | 
			
		||||
$_ap=&DWP(4*2,"esp");
 | 
			
		||||
$_bp=&DWP(4*3,"esp");
 | 
			
		||||
$_np=&DWP(4*4,"esp");
 | 
			
		||||
$_n0=&DWP(4*5,"esp");	$_n0q=&QWP(4*5,"esp");
 | 
			
		||||
$_sp=&DWP(4*6,"esp");
 | 
			
		||||
$_bpend=&DWP(4*7,"esp");
 | 
			
		||||
$frame=32;				# size of above frame rounded up to 16n
 | 
			
		||||
 | 
			
		||||
	&xor	("eax","eax");
 | 
			
		||||
	&mov	("edi",&wparam(5));	# int num
 | 
			
		||||
	&cmp	("edi",4);
 | 
			
		||||
	&jl	(&label("just_leave"));
 | 
			
		||||
 | 
			
		||||
	&lea	("esi",&wparam(0));	# put aside pointer to argument block
 | 
			
		||||
	&lea	("edx",&wparam(1));	# load ap
 | 
			
		||||
	&mov	("ebp","esp");		# saved stack pointer!
 | 
			
		||||
	&add	("edi",2);		# extra two words on top of tp
 | 
			
		||||
	&neg	("edi");
 | 
			
		||||
	&lea	("esp",&DWP(-$frame,"esp","edi",4));	# alloca($frame+4*(num+2))
 | 
			
		||||
	&neg	("edi");
 | 
			
		||||
 | 
			
		||||
	# minimize cache contention by arraning 2K window between stack
 | 
			
		||||
	# pointer and ap argument [np is also position sensitive vector,
 | 
			
		||||
	# but it's assumed to be near ap, as it's allocated at ~same
 | 
			
		||||
	# time].
 | 
			
		||||
	&mov	("eax","esp");
 | 
			
		||||
	&sub	("eax","edx");
 | 
			
		||||
	&and	("eax",2047);
 | 
			
		||||
	&sub	("esp","eax");		# this aligns sp and ap modulo 2048
 | 
			
		||||
 | 
			
		||||
	&xor	("edx","esp");
 | 
			
		||||
	&and	("edx",2048);
 | 
			
		||||
	&xor	("edx",2048);
 | 
			
		||||
	&sub	("esp","edx");		# this splits them apart modulo 4096
 | 
			
		||||
 | 
			
		||||
	&and	("esp",-64);		# align to cache line
 | 
			
		||||
 | 
			
		||||
	################################# load argument block...
 | 
			
		||||
	&mov	("eax",&DWP(0*4,"esi"));# BN_ULONG *rp
 | 
			
		||||
	&mov	("ebx",&DWP(1*4,"esi"));# const BN_ULONG *ap
 | 
			
		||||
	&mov	("ecx",&DWP(2*4,"esi"));# const BN_ULONG *bp
 | 
			
		||||
	&mov	("edx",&DWP(3*4,"esi"));# const BN_ULONG *np
 | 
			
		||||
	&mov	("esi",&DWP(4*4,"esi"));# const BN_ULONG *n0
 | 
			
		||||
	#&mov	("edi",&DWP(5*4,"esi"));# int num
 | 
			
		||||
 | 
			
		||||
	&mov	("esi",&DWP(0,"esi"));	# pull n0[0]
 | 
			
		||||
	&mov	($_rp,"eax");		# ... save a copy of argument block
 | 
			
		||||
	&mov	($_ap,"ebx");
 | 
			
		||||
	&mov	($_bp,"ecx");
 | 
			
		||||
	&mov	($_np,"edx");
 | 
			
		||||
	&mov	($_n0,"esi");
 | 
			
		||||
	&lea	($num,&DWP(-3,"edi"));	# num=num-1 to assist modulo-scheduling
 | 
			
		||||
	#&mov	($_num,$num);		# redundant as $num is not reused
 | 
			
		||||
	&mov	($_sp,"ebp");		# saved stack pointer!
 | 
			
		||||
 | 
			
		||||
if($sse2) {
 | 
			
		||||
$acc0="mm0";	# mmx register bank layout
 | 
			
		||||
$acc1="mm1";
 | 
			
		||||
$car0="mm2";
 | 
			
		||||
$car1="mm3";
 | 
			
		||||
$mul0="mm4";
 | 
			
		||||
$mul1="mm5";
 | 
			
		||||
$temp="mm6";
 | 
			
		||||
$mask="mm7";
 | 
			
		||||
 | 
			
		||||
	&picmeup("eax","OPENSSL_ia32cap_P");
 | 
			
		||||
	&bt	(&DWP(0,"eax"),26);
 | 
			
		||||
	&jnc	(&label("non_sse2"));
 | 
			
		||||
 | 
			
		||||
	&mov	("eax",-1);
 | 
			
		||||
	&movd	($mask,"eax");		# mask 32 lower bits
 | 
			
		||||
 | 
			
		||||
	&mov	($ap,$_ap);		# load input pointers
 | 
			
		||||
	&mov	($bp,$_bp);
 | 
			
		||||
	&mov	($np,$_np);
 | 
			
		||||
 | 
			
		||||
	&xor	($i,$i);		# i=0
 | 
			
		||||
	&xor	($j,$j);		# j=0
 | 
			
		||||
 | 
			
		||||
	&movd	($mul0,&DWP(0,$bp));		# bp[0]
 | 
			
		||||
	&movd	($mul1,&DWP(0,$ap));		# ap[0]
 | 
			
		||||
	&movd	($car1,&DWP(0,$np));		# np[0]
 | 
			
		||||
 | 
			
		||||
	&pmuludq($mul1,$mul0);			# ap[0]*bp[0]
 | 
			
		||||
	&movq	($car0,$mul1);
 | 
			
		||||
	&movq	($acc0,$mul1);			# I wish movd worked for
 | 
			
		||||
	&pand	($acc0,$mask);			# inter-register transfers
 | 
			
		||||
 | 
			
		||||
	&pmuludq($mul1,$_n0q);			# *=n0
 | 
			
		||||
 | 
			
		||||
	&pmuludq($car1,$mul1);			# "t[0]"*np[0]*n0
 | 
			
		||||
	&paddq	($car1,$acc0);
 | 
			
		||||
 | 
			
		||||
	&movd	($acc1,&DWP(4,$np));		# np[1]
 | 
			
		||||
	&movd	($acc0,&DWP(4,$ap));		# ap[1]
 | 
			
		||||
 | 
			
		||||
	&psrlq	($car0,32);
 | 
			
		||||
	&psrlq	($car1,32);
 | 
			
		||||
 | 
			
		||||
	&inc	($j);				# j++
 | 
			
		||||
&set_label("1st",16);
 | 
			
		||||
	&pmuludq($acc0,$mul0);			# ap[j]*bp[0]
 | 
			
		||||
	&pmuludq($acc1,$mul1);			# np[j]*m1
 | 
			
		||||
	&paddq	($car0,$acc0);			# +=c0
 | 
			
		||||
	&paddq	($car1,$acc1);			# +=c1
 | 
			
		||||
 | 
			
		||||
	&movq	($acc0,$car0);
 | 
			
		||||
	&pand	($acc0,$mask);
 | 
			
		||||
	&movd	($acc1,&DWP(4,$np,$j,4));	# np[j+1]
 | 
			
		||||
	&paddq	($car1,$acc0);			# +=ap[j]*bp[0];
 | 
			
		||||
	&movd	($acc0,&DWP(4,$ap,$j,4));	# ap[j+1]
 | 
			
		||||
	&psrlq	($car0,32);
 | 
			
		||||
	&movd	(&DWP($frame-4,"esp",$j,4),$car1);	# tp[j-1]=
 | 
			
		||||
	&psrlq	($car1,32);
 | 
			
		||||
 | 
			
		||||
	&lea	($j,&DWP(1,$j));
 | 
			
		||||
	&cmp	($j,$num);
 | 
			
		||||
	&jl	(&label("1st"));
 | 
			
		||||
 | 
			
		||||
	&pmuludq($acc0,$mul0);			# ap[num-1]*bp[0]
 | 
			
		||||
	&pmuludq($acc1,$mul1);			# np[num-1]*m1
 | 
			
		||||
	&paddq	($car0,$acc0);			# +=c0
 | 
			
		||||
	&paddq	($car1,$acc1);			# +=c1
 | 
			
		||||
 | 
			
		||||
	&movq	($acc0,$car0);
 | 
			
		||||
	&pand	($acc0,$mask);
 | 
			
		||||
	&paddq	($car1,$acc0);			# +=ap[num-1]*bp[0];
 | 
			
		||||
	&movd	(&DWP($frame-4,"esp",$j,4),$car1);	# tp[num-2]=
 | 
			
		||||
 | 
			
		||||
	&psrlq	($car0,32);
 | 
			
		||||
	&psrlq	($car1,32);
 | 
			
		||||
 | 
			
		||||
	&paddq	($car1,$car0);
 | 
			
		||||
	&movq	(&QWP($frame,"esp",$num,4),$car1);	# tp[num].tp[num-1]
 | 
			
		||||
 | 
			
		||||
	&inc	($i);				# i++
 | 
			
		||||
&set_label("outer");
 | 
			
		||||
	&xor	($j,$j);			# j=0
 | 
			
		||||
 | 
			
		||||
	&movd	($mul0,&DWP(0,$bp,$i,4));	# bp[i]
 | 
			
		||||
	&movd	($mul1,&DWP(0,$ap));		# ap[0]
 | 
			
		||||
	&movd	($temp,&DWP($frame,"esp"));	# tp[0]
 | 
			
		||||
	&movd	($car1,&DWP(0,$np));		# np[0]
 | 
			
		||||
	&pmuludq($mul1,$mul0);			# ap[0]*bp[i]
 | 
			
		||||
 | 
			
		||||
	&paddq	($mul1,$temp);			# +=tp[0]
 | 
			
		||||
	&movq	($acc0,$mul1);
 | 
			
		||||
	&movq	($car0,$mul1);
 | 
			
		||||
	&pand	($acc0,$mask);
 | 
			
		||||
 | 
			
		||||
	&pmuludq($mul1,$_n0q);			# *=n0
 | 
			
		||||
 | 
			
		||||
	&pmuludq($car1,$mul1);
 | 
			
		||||
	&paddq	($car1,$acc0);
 | 
			
		||||
 | 
			
		||||
	&movd	($temp,&DWP($frame+4,"esp"));	# tp[1]
 | 
			
		||||
	&movd	($acc1,&DWP(4,$np));		# np[1]
 | 
			
		||||
	&movd	($acc0,&DWP(4,$ap));		# ap[1]
 | 
			
		||||
 | 
			
		||||
	&psrlq	($car0,32);
 | 
			
		||||
	&psrlq	($car1,32);
 | 
			
		||||
	&paddq	($car0,$temp);			# +=tp[1]
 | 
			
		||||
 | 
			
		||||
	&inc	($j);				# j++
 | 
			
		||||
	&dec	($num);
 | 
			
		||||
&set_label("inner");
 | 
			
		||||
	&pmuludq($acc0,$mul0);			# ap[j]*bp[i]
 | 
			
		||||
	&pmuludq($acc1,$mul1);			# np[j]*m1
 | 
			
		||||
	&paddq	($car0,$acc0);			# +=c0
 | 
			
		||||
	&paddq	($car1,$acc1);			# +=c1
 | 
			
		||||
 | 
			
		||||
	&movq	($acc0,$car0);
 | 
			
		||||
	&movd	($temp,&DWP($frame+4,"esp",$j,4));# tp[j+1]
 | 
			
		||||
	&pand	($acc0,$mask);
 | 
			
		||||
	&movd	($acc1,&DWP(4,$np,$j,4));	# np[j+1]
 | 
			
		||||
	&paddq	($car1,$acc0);			# +=ap[j]*bp[i]+tp[j]
 | 
			
		||||
	&movd	($acc0,&DWP(4,$ap,$j,4));	# ap[j+1]
 | 
			
		||||
	&psrlq	($car0,32);
 | 
			
		||||
	&movd	(&DWP($frame-4,"esp",$j,4),$car1);# tp[j-1]=
 | 
			
		||||
	&psrlq	($car1,32);
 | 
			
		||||
	&paddq	($car0,$temp);			# +=tp[j+1]
 | 
			
		||||
 | 
			
		||||
	&dec	($num);
 | 
			
		||||
	&lea	($j,&DWP(1,$j));		# j++
 | 
			
		||||
	&jnz	(&label("inner"));
 | 
			
		||||
 | 
			
		||||
	&mov	($num,$j);
 | 
			
		||||
	&pmuludq($acc0,$mul0);			# ap[num-1]*bp[i]
 | 
			
		||||
	&pmuludq($acc1,$mul1);			# np[num-1]*m1
 | 
			
		||||
	&paddq	($car0,$acc0);			# +=c0
 | 
			
		||||
	&paddq	($car1,$acc1);			# +=c1
 | 
			
		||||
 | 
			
		||||
	&movq	($acc0,$car0);
 | 
			
		||||
	&pand	($acc0,$mask);
 | 
			
		||||
	&paddq	($car1,$acc0);			# +=ap[num-1]*bp[i]+tp[num-1]
 | 
			
		||||
	&movd	(&DWP($frame-4,"esp",$j,4),$car1);	# tp[num-2]=
 | 
			
		||||
	&psrlq	($car0,32);
 | 
			
		||||
	&psrlq	($car1,32);
 | 
			
		||||
 | 
			
		||||
	&movd	($temp,&DWP($frame+4,"esp",$num,4));	# += tp[num]
 | 
			
		||||
	&paddq	($car1,$car0);
 | 
			
		||||
	&paddq	($car1,$temp);
 | 
			
		||||
	&movq	(&QWP($frame,"esp",$num,4),$car1);	# tp[num].tp[num-1]
 | 
			
		||||
 | 
			
		||||
	&lea	($i,&DWP(1,$i));		# i++
 | 
			
		||||
	&cmp	($i,$num);
 | 
			
		||||
	&jle	(&label("outer"));
 | 
			
		||||
 | 
			
		||||
	&emms	();				# done with mmx bank
 | 
			
		||||
	&jmp	(&label("common_tail"));
 | 
			
		||||
 | 
			
		||||
&set_label("non_sse2",16);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (0) {
 | 
			
		||||
	&mov	("esp",$_sp);
 | 
			
		||||
	&xor	("eax","eax");	# signal "not fast enough [yet]"
 | 
			
		||||
	&jmp	(&label("just_leave"));
 | 
			
		||||
	# While the below code provides competitive performance for
 | 
			
		||||
	# all key lengthes on modern Intel cores, it's still more
 | 
			
		||||
	# than 10% slower for 4096-bit key elsewhere:-( "Competitive"
 | 
			
		||||
	# means compared to the original integer-only assembler.
 | 
			
		||||
	# 512-bit RSA sign is better by ~40%, but that's about all
 | 
			
		||||
	# one can say about all CPUs...
 | 
			
		||||
} else {
 | 
			
		||||
$inp="esi";	# integer path uses these registers differently
 | 
			
		||||
$word="edi";
 | 
			
		||||
$carry="ebp";
 | 
			
		||||
 | 
			
		||||
	&mov	($inp,$_ap);
 | 
			
		||||
	&lea	($carry,&DWP(1,$num));
 | 
			
		||||
	&mov	($word,$_bp);
 | 
			
		||||
	&xor	($j,$j);				# j=0
 | 
			
		||||
	&mov	("edx",$inp);
 | 
			
		||||
	&and	($carry,1);				# see if num is even
 | 
			
		||||
	&sub	("edx",$word);				# see if ap==bp
 | 
			
		||||
	&lea	("eax",&DWP(4,$word,$num,4));		# &bp[num]
 | 
			
		||||
	&or	($carry,"edx");
 | 
			
		||||
	&mov	($word,&DWP(0,$word));			# bp[0]
 | 
			
		||||
	&jz	(&label("bn_sqr_mont"));
 | 
			
		||||
	&mov	($_bpend,"eax");
 | 
			
		||||
	&mov	("eax",&DWP(0,$inp));
 | 
			
		||||
	&xor	("edx","edx");
 | 
			
		||||
 | 
			
		||||
&set_label("mull",16);
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# ap[j]*bp[0]
 | 
			
		||||
	&add	($carry,"eax");
 | 
			
		||||
	&lea	($j,&DWP(1,$j));
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&mov	("eax",&DWP(0,$inp,$j,4));		# ap[j+1]
 | 
			
		||||
	&cmp	($j,$num);
 | 
			
		||||
	&mov	(&DWP($frame-4,"esp",$j,4),$carry);	# tp[j]=
 | 
			
		||||
	&jl	(&label("mull"));
 | 
			
		||||
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# ap[num-1]*bp[0]
 | 
			
		||||
	 &mov	($word,$_n0);
 | 
			
		||||
	&add	("eax",$carry);
 | 
			
		||||
	 &mov	($inp,$_np);
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	 &imul	($word,&DWP($frame,"esp"));		# n0*tp[0]
 | 
			
		||||
 | 
			
		||||
	&mov	(&DWP($frame,"esp",$num,4),"eax");	# tp[num-1]=
 | 
			
		||||
	&xor	($j,$j);
 | 
			
		||||
	&mov	(&DWP($frame+4,"esp",$num,4),"edx");	# tp[num]=
 | 
			
		||||
	&mov	(&DWP($frame+8,"esp",$num,4),$j);	# tp[num+1]=
 | 
			
		||||
 | 
			
		||||
	&mov	("eax",&DWP(0,$inp));			# np[0]
 | 
			
		||||
	&mul	($word);				# np[0]*m
 | 
			
		||||
	&add	("eax",&DWP($frame,"esp"));		# +=tp[0]
 | 
			
		||||
	&mov	("eax",&DWP(4,$inp));			# np[1]
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&inc	($j);
 | 
			
		||||
 | 
			
		||||
	&jmp	(&label("2ndmadd"));
 | 
			
		||||
 | 
			
		||||
&set_label("1stmadd",16);
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# ap[j]*bp[i]
 | 
			
		||||
	&add	($carry,&DWP($frame,"esp",$j,4));	# +=tp[j]
 | 
			
		||||
	&lea	($j,&DWP(1,$j));
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&add	($carry,"eax");
 | 
			
		||||
	&mov	("eax",&DWP(0,$inp,$j,4));		# ap[j+1]
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&cmp	($j,$num);
 | 
			
		||||
	&mov	(&DWP($frame-4,"esp",$j,4),$carry);	# tp[j]=
 | 
			
		||||
	&jl	(&label("1stmadd"));
 | 
			
		||||
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# ap[num-1]*bp[i]
 | 
			
		||||
	&add	("eax",&DWP($frame,"esp",$num,4));	# +=tp[num-1]
 | 
			
		||||
	 &mov	($word,$_n0);
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	 &mov	($inp,$_np);
 | 
			
		||||
	&add	($carry,"eax");
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	 &imul	($word,&DWP($frame,"esp"));		# n0*tp[0]
 | 
			
		||||
 | 
			
		||||
	&xor	($j,$j);
 | 
			
		||||
	&add	("edx",&DWP($frame+4,"esp",$num,4));	# carry+=tp[num]
 | 
			
		||||
	&mov	(&DWP($frame,"esp",$num,4),$carry);	# tp[num-1]=
 | 
			
		||||
	&adc	($j,0);
 | 
			
		||||
	 &mov	("eax",&DWP(0,$inp));			# np[0]
 | 
			
		||||
	&mov	(&DWP($frame+4,"esp",$num,4),"edx");	# tp[num]=
 | 
			
		||||
	&mov	(&DWP($frame+8,"esp",$num,4),$j);	# tp[num+1]=
 | 
			
		||||
 | 
			
		||||
	&mul	($word);				# np[0]*m
 | 
			
		||||
	&add	("eax",&DWP($frame,"esp"));		# +=tp[0]
 | 
			
		||||
	&mov	("eax",&DWP(4,$inp));			# np[1]
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&mov	($j,1);
 | 
			
		||||
 | 
			
		||||
&set_label("2ndmadd",16);
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# np[j]*m
 | 
			
		||||
	&add	($carry,&DWP($frame,"esp",$j,4));	# +=tp[j]
 | 
			
		||||
	&lea	($j,&DWP(1,$j));
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&add	($carry,"eax");
 | 
			
		||||
	&mov	("eax",&DWP(0,$inp,$j,4));		# np[j+1]
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&cmp	($j,$num);
 | 
			
		||||
	&mov	(&DWP($frame-8,"esp",$j,4),$carry);	# tp[j-1]=
 | 
			
		||||
	&jl	(&label("2ndmadd"));
 | 
			
		||||
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# np[j]*m
 | 
			
		||||
	&add	($carry,&DWP($frame,"esp",$num,4));	# +=tp[num-1]
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&add	($carry,"eax");
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&mov	(&DWP($frame-4,"esp",$num,4),$carry);	# tp[num-2]=
 | 
			
		||||
 | 
			
		||||
	&xor	("eax","eax");
 | 
			
		||||
	 &mov	($j,$_bp);				# &bp[i]
 | 
			
		||||
	&add	("edx",&DWP($frame+4,"esp",$num,4));	# carry+=tp[num]
 | 
			
		||||
	&adc	("eax",&DWP($frame+8,"esp",$num,4));	# +=tp[num+1]
 | 
			
		||||
	 &lea	($j,&DWP(4,$j));
 | 
			
		||||
	&mov	(&DWP($frame,"esp",$num,4),"edx");	# tp[num-1]=
 | 
			
		||||
	 &cmp	($j,$_bpend);
 | 
			
		||||
	&mov	(&DWP($frame+4,"esp",$num,4),"eax");	# tp[num]=
 | 
			
		||||
	&je	(&label("common_tail"));
 | 
			
		||||
 | 
			
		||||
	&mov	($word,&DWP(0,$j));			# bp[i+1]
 | 
			
		||||
	&mov	($inp,$_ap);
 | 
			
		||||
	&mov	($_bp,$j);				# &bp[++i]
 | 
			
		||||
	&xor	($j,$j);
 | 
			
		||||
	&xor	("edx","edx");
 | 
			
		||||
	&mov	("eax",&DWP(0,$inp));
 | 
			
		||||
	&jmp	(&label("1stmadd"));
 | 
			
		||||
 | 
			
		||||
&set_label("bn_sqr_mont",16);
 | 
			
		||||
$sbit=$num;
 | 
			
		||||
	&mov	($_num,$num);
 | 
			
		||||
	&mov	($_bp,$j);				# i=0
 | 
			
		||||
 | 
			
		||||
	&mov	("eax",$word);				# ap[0]
 | 
			
		||||
	&mul	($word);				# ap[0]*ap[0]
 | 
			
		||||
	&mov	(&DWP($frame,"esp"),"eax");		# tp[0]=
 | 
			
		||||
	&mov	($sbit,"edx");
 | 
			
		||||
	&shr	("edx",1);
 | 
			
		||||
	&and	($sbit,1);
 | 
			
		||||
	&inc	($j);
 | 
			
		||||
&set_label("sqr",16);
 | 
			
		||||
	&mov	("eax",&DWP(0,$inp,$j,4));		# ap[j]
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# ap[j]*ap[0]
 | 
			
		||||
	&add	("eax",$carry);
 | 
			
		||||
	&lea	($j,&DWP(1,$j));
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&lea	($carry,&DWP(0,$sbit,"eax",2));
 | 
			
		||||
	&shr	("eax",31);
 | 
			
		||||
	&cmp	($j,$_num);
 | 
			
		||||
	&mov	($sbit,"eax");
 | 
			
		||||
	&mov	(&DWP($frame-4,"esp",$j,4),$carry);	# tp[j]=
 | 
			
		||||
	&jl	(&label("sqr"));
 | 
			
		||||
 | 
			
		||||
	&mov	("eax",&DWP(0,$inp,$j,4));		# ap[num-1]
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# ap[num-1]*ap[0]
 | 
			
		||||
	&add	("eax",$carry);
 | 
			
		||||
	 &mov	($word,$_n0);
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	 &mov	($inp,$_np);
 | 
			
		||||
	&lea	($carry,&DWP(0,$sbit,"eax",2));
 | 
			
		||||
	 &imul	($word,&DWP($frame,"esp"));		# n0*tp[0]
 | 
			
		||||
	&shr	("eax",31);
 | 
			
		||||
	&mov	(&DWP($frame,"esp",$j,4),$carry);	# tp[num-1]=
 | 
			
		||||
 | 
			
		||||
	&lea	($carry,&DWP(0,"eax","edx",2));
 | 
			
		||||
	 &mov	("eax",&DWP(0,$inp));			# np[0]
 | 
			
		||||
	&shr	("edx",31);
 | 
			
		||||
	&mov	(&DWP($frame+4,"esp",$j,4),$carry);	# tp[num]=
 | 
			
		||||
	&mov	(&DWP($frame+8,"esp",$j,4),"edx");	# tp[num+1]=
 | 
			
		||||
 | 
			
		||||
	&mul	($word);				# np[0]*m
 | 
			
		||||
	&add	("eax",&DWP($frame,"esp"));		# +=tp[0]
 | 
			
		||||
	&mov	($num,$j);
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&mov	("eax",&DWP(4,$inp));			# np[1]
 | 
			
		||||
	&mov	($j,1);
 | 
			
		||||
 | 
			
		||||
&set_label("3rdmadd",16);
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# np[j]*m
 | 
			
		||||
	&add	($carry,&DWP($frame,"esp",$j,4));	# +=tp[j]
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&add	($carry,"eax");
 | 
			
		||||
	&mov	("eax",&DWP(4,$inp,$j,4));		# np[j+1]
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&mov	(&DWP($frame-4,"esp",$j,4),$carry);	# tp[j-1]=
 | 
			
		||||
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# np[j+1]*m
 | 
			
		||||
	&add	($carry,&DWP($frame+4,"esp",$j,4));	# +=tp[j+1]
 | 
			
		||||
	&lea	($j,&DWP(2,$j));
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&add	($carry,"eax");
 | 
			
		||||
	&mov	("eax",&DWP(0,$inp,$j,4));		# np[j+2]
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&cmp	($j,$num);
 | 
			
		||||
	&mov	(&DWP($frame-8,"esp",$j,4),$carry);	# tp[j]=
 | 
			
		||||
	&jl	(&label("3rdmadd"));
 | 
			
		||||
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# np[j]*m
 | 
			
		||||
	&add	($carry,&DWP($frame,"esp",$num,4));	# +=tp[num-1]
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&add	($carry,"eax");
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&mov	(&DWP($frame-4,"esp",$num,4),$carry);	# tp[num-2]=
 | 
			
		||||
 | 
			
		||||
	&mov	($j,$_bp);				# i
 | 
			
		||||
	&xor	("eax","eax");
 | 
			
		||||
	&mov	($inp,$_ap);
 | 
			
		||||
	&add	("edx",&DWP($frame+4,"esp",$num,4));	# carry+=tp[num]
 | 
			
		||||
	&adc	("eax",&DWP($frame+8,"esp",$num,4));	# +=tp[num+1]
 | 
			
		||||
	&mov	(&DWP($frame,"esp",$num,4),"edx");	# tp[num-1]=
 | 
			
		||||
	&cmp	($j,$num);
 | 
			
		||||
	&mov	(&DWP($frame+4,"esp",$num,4),"eax");	# tp[num]=
 | 
			
		||||
	&je	(&label("common_tail"));
 | 
			
		||||
 | 
			
		||||
	&mov	($word,&DWP(4,$inp,$j,4));		# ap[i]
 | 
			
		||||
	&lea	($j,&DWP(1,$j));
 | 
			
		||||
	&mov	("eax",$word);
 | 
			
		||||
	&mov	($_bp,$j);				# ++i
 | 
			
		||||
	&mul	($word);				# ap[i]*ap[i]
 | 
			
		||||
	&add	("eax",&DWP($frame,"esp",$j,4));	# +=tp[i]
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&mov	(&DWP($frame,"esp",$j,4),"eax");	# tp[i]=
 | 
			
		||||
	&xor	($carry,$carry);
 | 
			
		||||
	&cmp	($j,$num);
 | 
			
		||||
	&lea	($j,&DWP(1,$j));
 | 
			
		||||
	&je	(&label("sqrlast"));
 | 
			
		||||
 | 
			
		||||
	&mov	($sbit,"edx");				# zaps $num
 | 
			
		||||
	&shr	("edx",1);
 | 
			
		||||
	&and	($sbit,1);
 | 
			
		||||
&set_label("sqradd",16);
 | 
			
		||||
	&mov	("eax",&DWP(0,$inp,$j,4));		# ap[j]
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&mul	($word);				# ap[j]*ap[i]
 | 
			
		||||
	&add	("eax",$carry);
 | 
			
		||||
	&lea	($carry,&DWP(0,"eax","eax"));
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&shr	("eax",31);
 | 
			
		||||
	&add	($carry,&DWP($frame,"esp",$j,4));	# +=tp[j]
 | 
			
		||||
	&lea	($j,&DWP(1,$j));
 | 
			
		||||
	&adc	("eax",0);
 | 
			
		||||
	&add	($carry,$sbit);
 | 
			
		||||
	&adc	("eax",0);
 | 
			
		||||
	&cmp	($j,$_num);
 | 
			
		||||
	&mov	(&DWP($frame-4,"esp",$j,4),$carry);	# tp[j]=
 | 
			
		||||
	&mov	($sbit,"eax");
 | 
			
		||||
	&jle	(&label("sqradd"));
 | 
			
		||||
 | 
			
		||||
	&mov	($carry,"edx");
 | 
			
		||||
	&lea	("edx",&DWP(0,$sbit,"edx",2));
 | 
			
		||||
	&shr	($carry,31);
 | 
			
		||||
&set_label("sqrlast");
 | 
			
		||||
	&mov	($word,$_n0);
 | 
			
		||||
	&mov	($inp,$_np);
 | 
			
		||||
	&imul	($word,&DWP($frame,"esp"));		# n0*tp[0]
 | 
			
		||||
 | 
			
		||||
	&add	("edx",&DWP($frame,"esp",$j,4));	# +=tp[num]
 | 
			
		||||
	&mov	("eax",&DWP(0,$inp));			# np[0]
 | 
			
		||||
	&adc	($carry,0);
 | 
			
		||||
	&mov	(&DWP($frame,"esp",$j,4),"edx");	# tp[num]=
 | 
			
		||||
	&mov	(&DWP($frame+4,"esp",$j,4),$carry);	# tp[num+1]=
 | 
			
		||||
 | 
			
		||||
	&mul	($word);				# np[0]*m
 | 
			
		||||
	&add	("eax",&DWP($frame,"esp"));		# +=tp[0]
 | 
			
		||||
	&lea	($num,&DWP(-1,$j));
 | 
			
		||||
	&adc	("edx",0);
 | 
			
		||||
	&mov	($j,1);
 | 
			
		||||
	&mov	("eax",&DWP(4,$inp));			# np[1]
 | 
			
		||||
 | 
			
		||||
	&jmp	(&label("3rdmadd"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
&set_label("common_tail",16);
 | 
			
		||||
	&mov	($np,$_np);			# load modulus pointer
 | 
			
		||||
	&mov	($rp,$_rp);			# load result pointer
 | 
			
		||||
	&lea	($tp,&DWP($frame,"esp"));	# [$ap and $bp are zapped]
 | 
			
		||||
 | 
			
		||||
	&mov	("eax",&DWP(0,$tp));		# tp[0]
 | 
			
		||||
	&mov	($j,$num);			# j=num-1
 | 
			
		||||
	&xor	($i,$i);			# i=0 and clear CF!
 | 
			
		||||
 | 
			
		||||
&set_label("sub",16);
 | 
			
		||||
	&sbb	("eax",&DWP(0,$np,$i,4));
 | 
			
		||||
	&mov	(&DWP(0,$rp,$i,4),"eax");	# rp[i]=tp[i]-np[i]
 | 
			
		||||
	&dec	($j);				# doesn't affect CF!
 | 
			
		||||
	&mov	("eax",&DWP(4,$tp,$i,4));	# tp[i+1]
 | 
			
		||||
	&lea	($i,&DWP(1,$i));		# i++
 | 
			
		||||
	&jge	(&label("sub"));
 | 
			
		||||
 | 
			
		||||
	&sbb	("eax",0);			# handle upmost overflow bit
 | 
			
		||||
	&and	($tp,"eax");
 | 
			
		||||
	¬	("eax");
 | 
			
		||||
	&mov	($np,$rp);
 | 
			
		||||
	&and	($np,"eax");
 | 
			
		||||
	&or	($tp,$np);			# tp=carry?tp:rp
 | 
			
		||||
 | 
			
		||||
&set_label("copy",16);				# copy or in-place refresh
 | 
			
		||||
	&mov	("eax",&DWP(0,$tp,$num,4));
 | 
			
		||||
	&mov	(&DWP(0,$rp,$num,4),"eax");	# rp[i]=tp[i]
 | 
			
		||||
	&mov	(&DWP($frame,"esp",$num,4),$j);	# zap temporary vector
 | 
			
		||||
	&dec	($num);
 | 
			
		||||
	&jge	(&label("copy"));
 | 
			
		||||
 | 
			
		||||
	&mov	("esp",$_sp);		# pull saved stack pointer
 | 
			
		||||
	&mov	("eax",1);
 | 
			
		||||
&set_label("just_leave");
 | 
			
		||||
&function_end("bn_mul_mont");
 | 
			
		||||
 | 
			
		||||
&asciz("Montgomery Multiplication for x86, CRYPTOGAMS by <appro\@openssl.org>");
 | 
			
		||||
 | 
			
		||||
&asm_finish();
 | 
			
		||||
							
								
								
									
										213
									
								
								crypto/bn/asm/x86_64-mont.pl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										213
									
								
								crypto/bn/asm/x86_64-mont.pl
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,213 @@
 | 
			
		||||
#!/usr/bin/env perl
 | 
			
		||||
 | 
			
		||||
# ====================================================================
 | 
			
		||||
# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
 | 
			
		||||
# project. The module is, however, dual licensed under OpenSSL and
 | 
			
		||||
# CRYPTOGAMS licenses depending on where you obtain it. For further
 | 
			
		||||
# details see http://www.openssl.org/~appro/cryptogams/.
 | 
			
		||||
# ====================================================================
 | 
			
		||||
 | 
			
		||||
# October 2005.
 | 
			
		||||
#
 | 
			
		||||
# Montgomery multiplication routine for x86_64. While it gives modest
 | 
			
		||||
# 9% improvement of rsa4096 sign on Opteron, rsa512 sign runs more
 | 
			
		||||
# than twice, >2x, as fast. Most common rsa1024 sign is improved by
 | 
			
		||||
# respectful 50%. It remains to be seen if loop unrolling and
 | 
			
		||||
# dedicated squaring routine can provide further improvement...
 | 
			
		||||
 | 
			
		||||
$output=shift;
 | 
			
		||||
 | 
			
		||||
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
 | 
			
		||||
( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
 | 
			
		||||
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
 | 
			
		||||
die "can't locate x86_64-xlate.pl";
 | 
			
		||||
 | 
			
		||||
open STDOUT,"| $^X $xlate $output";
 | 
			
		||||
 | 
			
		||||
# int bn_mul_mont(
 | 
			
		||||
$rp="%rdi";	# BN_ULONG *rp,
 | 
			
		||||
$ap="%rsi";	# const BN_ULONG *ap,
 | 
			
		||||
$bp="%rdx";	# const BN_ULONG *bp,
 | 
			
		||||
$np="%rcx";	# const BN_ULONG *np,
 | 
			
		||||
$n0="%r8";	# const BN_ULONG *n0,
 | 
			
		||||
$num="%r9";	# int num);
 | 
			
		||||
$lo0="%r10";
 | 
			
		||||
$hi0="%r11";
 | 
			
		||||
$bp="%r12";	# reassign $bp
 | 
			
		||||
$hi1="%r13";
 | 
			
		||||
$i="%r14";
 | 
			
		||||
$j="%r15";
 | 
			
		||||
$m0="%rbx";
 | 
			
		||||
$m1="%rbp";
 | 
			
		||||
 | 
			
		||||
$code=<<___;
 | 
			
		||||
.text
 | 
			
		||||
 | 
			
		||||
.globl	bn_mul_mont
 | 
			
		||||
.type	bn_mul_mont,\@function,6
 | 
			
		||||
.align	16
 | 
			
		||||
bn_mul_mont:
 | 
			
		||||
	push	%rbx
 | 
			
		||||
	push	%rbp
 | 
			
		||||
	push	%r12
 | 
			
		||||
	push	%r13
 | 
			
		||||
	push	%r14
 | 
			
		||||
	push	%r15
 | 
			
		||||
 | 
			
		||||
	lea	2($num),%rax
 | 
			
		||||
	mov	%rsp,%rbp
 | 
			
		||||
	neg	%rax
 | 
			
		||||
	lea	(%rsp,%rax,8),%rsp	# tp=alloca(8*(num+2))
 | 
			
		||||
	and	\$-1024,%rsp		# minimize TLB usage
 | 
			
		||||
 | 
			
		||||
	mov	%rbp,8(%rsp,$num,8)	# tp[num+1]=%rsp
 | 
			
		||||
	mov	%rdx,$bp		# $bp reassigned, remember?
 | 
			
		||||
 | 
			
		||||
	mov	($n0),$n0		# pull n0[0] value
 | 
			
		||||
 | 
			
		||||
	xor	$i,$i			# i=0
 | 
			
		||||
	xor	$j,$j			# j=0
 | 
			
		||||
 | 
			
		||||
	mov	($bp),$m0		# m0=bp[0]
 | 
			
		||||
	mov	($ap),%rax
 | 
			
		||||
	mulq	$m0			# ap[0]*bp[0]
 | 
			
		||||
	mov	%rax,$lo0
 | 
			
		||||
	mov	%rdx,$hi0
 | 
			
		||||
 | 
			
		||||
	imulq	$n0,%rax		# "tp[0]"*n0
 | 
			
		||||
	mov	%rax,$m1
 | 
			
		||||
 | 
			
		||||
	mulq	($np)			# np[0]*m1
 | 
			
		||||
	add	$lo0,%rax		# discarded
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	mov	%rdx,$hi1
 | 
			
		||||
 | 
			
		||||
	lea	1($j),$j		# j++
 | 
			
		||||
.L1st:
 | 
			
		||||
	mov	($ap,$j,8),%rax
 | 
			
		||||
	mulq	$m0			# ap[j]*bp[0]
 | 
			
		||||
	add	$hi0,%rax
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	mov	%rax,$lo0
 | 
			
		||||
	mov	($np,$j,8),%rax
 | 
			
		||||
	mov	%rdx,$hi0
 | 
			
		||||
 | 
			
		||||
	mulq	$m1			# np[j]*m1
 | 
			
		||||
	add	$hi1,%rax
 | 
			
		||||
	lea	1($j),$j		# j++
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	add	$lo0,%rax		# np[j]*m1+ap[j]*bp[0]
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	mov	%rax,-16(%rsp,$j,8)	# tp[j-1]
 | 
			
		||||
	cmp	$num,$j
 | 
			
		||||
	mov	%rdx,$hi1
 | 
			
		||||
	jl	.L1st
 | 
			
		||||
 | 
			
		||||
	xor	%rdx,%rdx
 | 
			
		||||
	add	$hi0,$hi1
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	mov	$hi1,-8(%rsp,$num,8)
 | 
			
		||||
	mov	%rdx,(%rsp,$num,8)	# store upmost overflow bit
 | 
			
		||||
 | 
			
		||||
	lea	1($i),$i		# i++
 | 
			
		||||
.align	4
 | 
			
		||||
.Louter:
 | 
			
		||||
	xor	$j,$j			# j=0
 | 
			
		||||
 | 
			
		||||
	mov	($bp,$i,8),$m0		# m0=bp[i]
 | 
			
		||||
	mov	($ap),%rax		# ap[0]
 | 
			
		||||
	mulq	$m0			# ap[0]*bp[i]
 | 
			
		||||
	add	(%rsp),%rax		# ap[0]*bp[i]+tp[0]
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	mov	%rax,$lo0
 | 
			
		||||
	mov	%rdx,$hi0
 | 
			
		||||
 | 
			
		||||
	imulq	$n0,%rax		# tp[0]*n0
 | 
			
		||||
	mov	%rax,$m1
 | 
			
		||||
 | 
			
		||||
	mulq	($np,$j,8)		# np[0]*m1
 | 
			
		||||
	add	$lo0,%rax		# discarded
 | 
			
		||||
	mov	8(%rsp),$lo0		# tp[1]
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	mov	%rdx,$hi1
 | 
			
		||||
 | 
			
		||||
	lea	1($j),$j		# j++
 | 
			
		||||
.align	4
 | 
			
		||||
.Linner:
 | 
			
		||||
	mov	($ap,$j,8),%rax
 | 
			
		||||
	mulq	$m0			# ap[j]*bp[i]
 | 
			
		||||
	add	$hi0,%rax
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	add	%rax,$lo0		# ap[j]*bp[i]+tp[j]
 | 
			
		||||
	mov	($np,$j,8),%rax
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	mov	%rdx,$hi0
 | 
			
		||||
 | 
			
		||||
	mulq	$m1			# np[j]*m1
 | 
			
		||||
	add	$hi1,%rax
 | 
			
		||||
	lea	1($j),$j		# j++
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	add	$lo0,%rax		# np[j]*m1+ap[j]*bp[i]+tp[j]
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	mov	(%rsp,$j,8),$lo0
 | 
			
		||||
	cmp	$num,$j
 | 
			
		||||
	mov	%rax,-16(%rsp,$j,8)	# tp[j-1]
 | 
			
		||||
	mov	%rdx,$hi1
 | 
			
		||||
	jl	.Linner
 | 
			
		||||
 | 
			
		||||
	xor	%rdx,%rdx
 | 
			
		||||
	add	$hi0,$hi1
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	add	$lo0,$hi1		# pull upmost overflow bit
 | 
			
		||||
	adc	\$0,%rdx
 | 
			
		||||
	mov	$hi1,-8(%rsp,$num,8)
 | 
			
		||||
	mov	%rdx,(%rsp,$num,8)	# store upmost overflow bit
 | 
			
		||||
 | 
			
		||||
	lea	1($i),$i		# i++
 | 
			
		||||
	cmp	$num,$i
 | 
			
		||||
	jl	.Louter
 | 
			
		||||
 | 
			
		||||
	lea	(%rsp),$ap		# borrow ap for tp
 | 
			
		||||
	lea	-1($num),$j		# j=num-1
 | 
			
		||||
 | 
			
		||||
	mov	($ap),%rax		# tp[0]
 | 
			
		||||
	xor	$i,$i			# i=0 and clear CF!
 | 
			
		||||
	jmp	.Lsub
 | 
			
		||||
.align	16
 | 
			
		||||
.Lsub:	sbb	($np,$i,8),%rax
 | 
			
		||||
	mov	%rax,($rp,$i,8)		# rp[i]=tp[i]-np[i]
 | 
			
		||||
	dec	$j			# doesn't affect CF!
 | 
			
		||||
	mov	8($ap,$i,8),%rax	# tp[i+1]
 | 
			
		||||
	lea	1($i),$i		# i++
 | 
			
		||||
	jge	.Lsub
 | 
			
		||||
 | 
			
		||||
	sbb	\$0,%rax		# handle upmost overflow bit
 | 
			
		||||
	and	%rax,$ap
 | 
			
		||||
	not	%rax
 | 
			
		||||
	mov	$rp,$np
 | 
			
		||||
	and	%rax,$np
 | 
			
		||||
	lea	-1($num),$j
 | 
			
		||||
	or	$np,$ap			# ap=borrow?tp:rp
 | 
			
		||||
.align	16
 | 
			
		||||
.Lcopy:					# copy or in-place refresh
 | 
			
		||||
	mov	($ap,$j,8),%rax
 | 
			
		||||
	mov	%rax,($rp,$j,8)		# rp[i]=tp[i]
 | 
			
		||||
	mov	$i,(%rsp,$j,8)		# zap temporary vector
 | 
			
		||||
	dec	$j
 | 
			
		||||
	jge	.Lcopy
 | 
			
		||||
 | 
			
		||||
	mov	8(%rsp,$num,8),%rsp	# restore %rsp
 | 
			
		||||
	mov	\$1,%rax
 | 
			
		||||
	pop	%r15
 | 
			
		||||
	pop	%r14
 | 
			
		||||
	pop	%r13
 | 
			
		||||
	pop	%r12
 | 
			
		||||
	pop	%rbp
 | 
			
		||||
	pop	%rbx
 | 
			
		||||
	ret
 | 
			
		||||
.size	bn_mul_mont,.-bn_mul_mont
 | 
			
		||||
.asciz	"Montgomery Multiplication for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
 | 
			
		||||
___
 | 
			
		||||
 | 
			
		||||
print $code;
 | 
			
		||||
close STDOUT;
 | 
			
		||||
@@ -245,8 +245,18 @@ extern "C" {
 | 
			
		||||
 | 
			
		||||
#define BN_FLG_MALLOCED		0x01
 | 
			
		||||
#define BN_FLG_STATIC_DATA	0x02
 | 
			
		||||
#define BN_FLG_EXP_CONSTTIME	0x04 /* avoid leaking exponent information through timings
 | 
			
		||||
                            	      * (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime) */
 | 
			
		||||
#define BN_FLG_CONSTTIME	0x04 /* avoid leaking exponent information through timing,
 | 
			
		||||
                                      * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime,
 | 
			
		||||
                                      * BN_div() will call BN_div_no_branch,
 | 
			
		||||
                                      * BN_mod_inverse() will call BN_mod_inverse_no_branch.
 | 
			
		||||
                                      */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME /* deprecated name for the flag */
 | 
			
		||||
                                      /* avoid leaking exponent information through timings
 | 
			
		||||
                                      * (BN_mod_exp_mont() will call BN_mod_exp_mont_consttime) */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#define BN_FLG_FREE		0x8000	/* used for debuging */
 | 
			
		||||
#endif
 | 
			
		||||
@@ -516,6 +526,26 @@ int	BN_is_prime_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx, BN_GENCB *cb);
 | 
			
		||||
int	BN_is_prime_fasttest_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx,
 | 
			
		||||
		int do_trial_division, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int BN_X931_derive_prime(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
 | 
			
		||||
			void (*cb)(int, int, void *), void *cb_arg,
 | 
			
		||||
			const BIGNUM *Xp, const BIGNUM *Xp1, const BIGNUM *Xp2,
 | 
			
		||||
			const BIGNUM *e, BN_CTX *ctx);
 | 
			
		||||
int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx);
 | 
			
		||||
int BN_X931_generate_prime(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
 | 
			
		||||
			BIGNUM *Xp1, BIGNUM *Xp2,
 | 
			
		||||
			const BIGNUM *Xp,
 | 
			
		||||
			const BIGNUM *e, BN_CTX *ctx,
 | 
			
		||||
			void (*cb)(int, int, void *), void *cb_arg);
 | 
			
		||||
 | 
			
		||||
int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
 | 
			
		||||
			const BIGNUM *Xp, const BIGNUM *Xp1, const BIGNUM *Xp2,
 | 
			
		||||
			const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb);
 | 
			
		||||
int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
 | 
			
		||||
			BIGNUM *Xp1, BIGNUM *Xp2,
 | 
			
		||||
			const BIGNUM *Xp,
 | 
			
		||||
			const BIGNUM *e, BN_CTX *ctx,
 | 
			
		||||
			BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
BN_MONT_CTX *BN_MONT_CTX_new(void );
 | 
			
		||||
void BN_MONT_CTX_init(BN_MONT_CTX *ctx);
 | 
			
		||||
int BN_mod_mul_montgomery(BIGNUM *r,const BIGNUM *a,const BIGNUM *b,
 | 
			
		||||
@@ -534,7 +564,7 @@ BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, int lock,
 | 
			
		||||
#define	BN_BLINDING_NO_UPDATE	0x00000001
 | 
			
		||||
#define	BN_BLINDING_NO_RECREATE	0x00000002
 | 
			
		||||
 | 
			
		||||
BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod);
 | 
			
		||||
BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, /* const */ BIGNUM *mod);
 | 
			
		||||
void BN_BLINDING_free(BN_BLINDING *b);
 | 
			
		||||
int BN_BLINDING_update(BN_BLINDING *b,BN_CTX *ctx);
 | 
			
		||||
int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx);
 | 
			
		||||
@@ -546,7 +576,7 @@ void BN_BLINDING_set_thread_id(BN_BLINDING *, unsigned long);
 | 
			
		||||
unsigned long BN_BLINDING_get_flags(const BN_BLINDING *);
 | 
			
		||||
void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long);
 | 
			
		||||
BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,
 | 
			
		||||
	const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,
 | 
			
		||||
	const BIGNUM *e, /* const */ BIGNUM *m, BN_CTX *ctx,
 | 
			
		||||
	int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
 | 
			
		||||
			  const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx),
 | 
			
		||||
	BN_MONT_CTX *m_ctx);
 | 
			
		||||
@@ -775,6 +805,7 @@ void ERR_load_BN_strings(void);
 | 
			
		||||
#define BN_F_BN_CTX_NEW					 106
 | 
			
		||||
#define BN_F_BN_CTX_START				 129
 | 
			
		||||
#define BN_F_BN_DIV					 107
 | 
			
		||||
#define BN_F_BN_DIV_NO_BRANCH				 138
 | 
			
		||||
#define BN_F_BN_DIV_RECP				 130
 | 
			
		||||
#define BN_F_BN_EXP					 123
 | 
			
		||||
#define BN_F_BN_EXPAND2					 108
 | 
			
		||||
@@ -793,6 +824,7 @@ void ERR_load_BN_strings(void);
 | 
			
		||||
#define BN_F_BN_MOD_EXP_RECP				 125
 | 
			
		||||
#define BN_F_BN_MOD_EXP_SIMPLE				 126
 | 
			
		||||
#define BN_F_BN_MOD_INVERSE				 110
 | 
			
		||||
#define BN_F_BN_MOD_INVERSE_NO_BRANCH			 139
 | 
			
		||||
#define BN_F_BN_MOD_LSHIFT_QUICK			 119
 | 
			
		||||
#define BN_F_BN_MOD_MUL_RECIPROCAL			 111
 | 
			
		||||
#define BN_F_BN_MOD_SQRT				 121
 | 
			
		||||
 
 | 
			
		||||
@@ -131,7 +131,7 @@ struct bn_blinding_st
 | 
			
		||||
			  BN_MONT_CTX *m_ctx);
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod)
 | 
			
		||||
BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, /* const */ BIGNUM *mod)
 | 
			
		||||
	{
 | 
			
		||||
	BN_BLINDING *ret=NULL;
 | 
			
		||||
 | 
			
		||||
@@ -151,7 +151,12 @@ BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod)
 | 
			
		||||
		{
 | 
			
		||||
		if ((ret->Ai = BN_dup(Ai)) == NULL) goto err;
 | 
			
		||||
		}
 | 
			
		||||
	ret->mod = mod;
 | 
			
		||||
 | 
			
		||||
	/* save a copy of mod in the BN_BLINDING structure */
 | 
			
		||||
	if ((ret->mod = BN_dup(mod)) == NULL) goto err;
 | 
			
		||||
	if (BN_get_flags(mod, BN_FLG_CONSTTIME) != 0)
 | 
			
		||||
		BN_set_flags(ret->mod, BN_FLG_CONSTTIME);
 | 
			
		||||
 | 
			
		||||
	ret->counter = BN_BLINDING_COUNTER;
 | 
			
		||||
	return(ret);
 | 
			
		||||
err:
 | 
			
		||||
@@ -167,6 +172,7 @@ void BN_BLINDING_free(BN_BLINDING *r)
 | 
			
		||||
	if (r->A  != NULL) BN_free(r->A );
 | 
			
		||||
	if (r->Ai != NULL) BN_free(r->Ai);
 | 
			
		||||
	if (r->e  != NULL) BN_free(r->e );
 | 
			
		||||
	if (r->mod != NULL) BN_free(r->mod); 
 | 
			
		||||
	OPENSSL_free(r);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -278,7 +284,7 @@ void BN_BLINDING_set_flags(BN_BLINDING *b, unsigned long flags)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b,
 | 
			
		||||
	const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,
 | 
			
		||||
	const BIGNUM *e, /* const */ BIGNUM *m, BN_CTX *ctx,
 | 
			
		||||
	int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
 | 
			
		||||
			  const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx),
 | 
			
		||||
	BN_MONT_CTX *m_ctx)
 | 
			
		||||
 
 | 
			
		||||
@@ -109,4 +109,26 @@ int BN_is_prime_fasttest(const BIGNUM *a, int checks,
 | 
			
		||||
	return BN_is_prime_fasttest_ex(a, checks, ctx_passed,
 | 
			
		||||
				do_trial_division, &cb);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int BN_X931_derive_prime(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
 | 
			
		||||
			void (*callback)(int, int, void *), void *cb_arg,
 | 
			
		||||
			const BIGNUM *Xp, const BIGNUM *Xp1, const BIGNUM *Xp2,
 | 
			
		||||
			const BIGNUM *e, BN_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
	BN_GENCB cb;
 | 
			
		||||
	BN_GENCB_set_old(&cb, callback, cb_arg);
 | 
			
		||||
	return BN_X931_derive_prime_ex(p, p1, p2, Xp, Xp1, Xp2, e, ctx, &cb);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int BN_X931_generate_prime(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
 | 
			
		||||
			BIGNUM *Xp1, BIGNUM *Xp2,
 | 
			
		||||
			const BIGNUM *Xp,
 | 
			
		||||
			const BIGNUM *e, BN_CTX *ctx,
 | 
			
		||||
			void (*callback)(int, int, void *), void *cb_arg)
 | 
			
		||||
	{
 | 
			
		||||
	BN_GENCB cb;
 | 
			
		||||
	BN_GENCB_set_old(&cb, callback, cb_arg);
 | 
			
		||||
	return BN_X931_generate_prime_ex(p, p1, p2, Xp1, Xp2, Xp, e, ctx, &cb);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -169,13 +169,15 @@ int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d,
 | 
			
		||||
#endif /* OPENSSL_NO_ASM */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* BN_div computes  dv := num / divisor,  rounding towards zero, and sets up
 | 
			
		||||
 * rm  such that  dv*divisor + rm = num  holds.
 | 
			
		||||
/* BN_div[_no_branch] computes  dv := num / divisor,  rounding towards
 | 
			
		||||
 * zero, and sets up rm  such that  dv*divisor + rm = num  holds.
 | 
			
		||||
 * Thus:
 | 
			
		||||
 *     dv->neg == num->neg ^ divisor->neg  (unless the result is zero)
 | 
			
		||||
 *     rm->neg == num->neg                 (unless the remainder is zero)
 | 
			
		||||
 * If 'dv' or 'rm' is NULL, the respective value is not returned.
 | 
			
		||||
 */
 | 
			
		||||
static int BN_div_no_branch(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num,
 | 
			
		||||
        const BIGNUM *divisor, BN_CTX *ctx);
 | 
			
		||||
int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,
 | 
			
		||||
	   BN_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
@@ -185,6 +187,11 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,
 | 
			
		||||
	BN_ULONG d0,d1;
 | 
			
		||||
	int num_n,div_n;
 | 
			
		||||
 | 
			
		||||
	if ((BN_get_flags(num, BN_FLG_CONSTTIME) != 0) || (BN_get_flags(divisor, BN_FLG_CONSTTIME) != 0))
 | 
			
		||||
		{
 | 
			
		||||
		return BN_div_no_branch(dv, rm, num, divisor, ctx);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	bn_check_top(dv);
 | 
			
		||||
	bn_check_top(rm);
 | 
			
		||||
	bn_check_top(num);
 | 
			
		||||
@@ -397,4 +404,229 @@ err:
 | 
			
		||||
	return(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* BN_div_no_branch is a special version of BN_div. It does not contain
 | 
			
		||||
 * branches that may leak sensitive information.
 | 
			
		||||
 */
 | 
			
		||||
static int BN_div_no_branch(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, 
 | 
			
		||||
	const BIGNUM *divisor, BN_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
	int norm_shift,i,loop;
 | 
			
		||||
	BIGNUM *tmp,wnum,*snum,*sdiv,*res;
 | 
			
		||||
	BN_ULONG *resp,*wnump;
 | 
			
		||||
	BN_ULONG d0,d1;
 | 
			
		||||
	int num_n,div_n;
 | 
			
		||||
 | 
			
		||||
	bn_check_top(dv);
 | 
			
		||||
	bn_check_top(rm);
 | 
			
		||||
	bn_check_top(num);
 | 
			
		||||
	bn_check_top(divisor);
 | 
			
		||||
 | 
			
		||||
	if (BN_is_zero(divisor))
 | 
			
		||||
		{
 | 
			
		||||
		BNerr(BN_F_BN_DIV_NO_BRANCH,BN_R_DIV_BY_ZERO);
 | 
			
		||||
		return(0);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	BN_CTX_start(ctx);
 | 
			
		||||
	tmp=BN_CTX_get(ctx);
 | 
			
		||||
	snum=BN_CTX_get(ctx);
 | 
			
		||||
	sdiv=BN_CTX_get(ctx);
 | 
			
		||||
	if (dv == NULL)
 | 
			
		||||
		res=BN_CTX_get(ctx);
 | 
			
		||||
	else	res=dv;
 | 
			
		||||
	if (sdiv == NULL || res == NULL) goto err;
 | 
			
		||||
 | 
			
		||||
	/* First we normalise the numbers */
 | 
			
		||||
	norm_shift=BN_BITS2-((BN_num_bits(divisor))%BN_BITS2);
 | 
			
		||||
	if (!(BN_lshift(sdiv,divisor,norm_shift))) goto err;
 | 
			
		||||
	sdiv->neg=0;
 | 
			
		||||
	norm_shift+=BN_BITS2;
 | 
			
		||||
	if (!(BN_lshift(snum,num,norm_shift))) goto err;
 | 
			
		||||
	snum->neg=0;
 | 
			
		||||
 | 
			
		||||
	/* Since we don't know whether snum is larger than sdiv,
 | 
			
		||||
	 * we pad snum with enough zeroes without changing its
 | 
			
		||||
	 * value. 
 | 
			
		||||
	 */
 | 
			
		||||
	if (snum->top <= sdiv->top+1) 
 | 
			
		||||
		{
 | 
			
		||||
		if (bn_wexpand(snum, sdiv->top + 2) == NULL) goto err;
 | 
			
		||||
		for (i = snum->top; i < sdiv->top + 2; i++) snum->d[i] = 0;
 | 
			
		||||
		snum->top = sdiv->top + 2;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (bn_wexpand(snum, snum->top + 1) == NULL) goto err;
 | 
			
		||||
		snum->d[snum->top] = 0;
 | 
			
		||||
		snum->top ++;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	div_n=sdiv->top;
 | 
			
		||||
	num_n=snum->top;
 | 
			
		||||
	loop=num_n-div_n;
 | 
			
		||||
	/* Lets setup a 'window' into snum
 | 
			
		||||
	 * This is the part that corresponds to the current
 | 
			
		||||
	 * 'area' being divided */
 | 
			
		||||
	wnum.neg   = 0;
 | 
			
		||||
	wnum.d     = &(snum->d[loop]);
 | 
			
		||||
	wnum.top   = div_n;
 | 
			
		||||
	/* only needed when BN_ucmp messes up the values between top and max */
 | 
			
		||||
	wnum.dmax  = snum->dmax - loop; /* so we don't step out of bounds */
 | 
			
		||||
 | 
			
		||||
	/* Get the top 2 words of sdiv */
 | 
			
		||||
	/* div_n=sdiv->top; */
 | 
			
		||||
	d0=sdiv->d[div_n-1];
 | 
			
		||||
	d1=(div_n == 1)?0:sdiv->d[div_n-2];
 | 
			
		||||
 | 
			
		||||
	/* pointer to the 'top' of snum */
 | 
			
		||||
	wnump= &(snum->d[num_n-1]);
 | 
			
		||||
 | 
			
		||||
	/* Setup to 'res' */
 | 
			
		||||
	res->neg= (num->neg^divisor->neg);
 | 
			
		||||
	if (!bn_wexpand(res,(loop+1))) goto err;
 | 
			
		||||
	res->top=loop-1;
 | 
			
		||||
	resp= &(res->d[loop-1]);
 | 
			
		||||
 | 
			
		||||
	/* space for temp */
 | 
			
		||||
	if (!bn_wexpand(tmp,(div_n+1))) goto err;
 | 
			
		||||
 | 
			
		||||
	/* if res->top == 0 then clear the neg value otherwise decrease
 | 
			
		||||
	 * the resp pointer */
 | 
			
		||||
	if (res->top == 0)
 | 
			
		||||
		res->neg = 0;
 | 
			
		||||
	else
 | 
			
		||||
		resp--;
 | 
			
		||||
 | 
			
		||||
	for (i=0; i<loop-1; i++, wnump--, resp--)
 | 
			
		||||
		{
 | 
			
		||||
		BN_ULONG q,l0;
 | 
			
		||||
		/* the first part of the loop uses the top two words of
 | 
			
		||||
		 * snum and sdiv to calculate a BN_ULONG q such that
 | 
			
		||||
		 * | wnum - sdiv * q | < sdiv */
 | 
			
		||||
#if defined(BN_DIV3W) && !defined(OPENSSL_NO_ASM)
 | 
			
		||||
		BN_ULONG bn_div_3_words(BN_ULONG*,BN_ULONG,BN_ULONG);
 | 
			
		||||
		q=bn_div_3_words(wnump,d1,d0);
 | 
			
		||||
#else
 | 
			
		||||
		BN_ULONG n0,n1,rem=0;
 | 
			
		||||
 | 
			
		||||
		n0=wnump[0];
 | 
			
		||||
		n1=wnump[-1];
 | 
			
		||||
		if (n0 == d0)
 | 
			
		||||
			q=BN_MASK2;
 | 
			
		||||
		else 			/* n0 < d0 */
 | 
			
		||||
			{
 | 
			
		||||
#ifdef BN_LLONG
 | 
			
		||||
			BN_ULLONG t2;
 | 
			
		||||
 | 
			
		||||
#if defined(BN_LLONG) && defined(BN_DIV2W) && !defined(bn_div_words)
 | 
			
		||||
			q=(BN_ULONG)(((((BN_ULLONG)n0)<<BN_BITS2)|n1)/d0);
 | 
			
		||||
#else
 | 
			
		||||
			q=bn_div_words(n0,n1,d0);
 | 
			
		||||
#ifdef BN_DEBUG_LEVITTE
 | 
			
		||||
			fprintf(stderr,"DEBUG: bn_div_words(0x%08X,0x%08X,0x%08\
 | 
			
		||||
X) -> 0x%08X\n",
 | 
			
		||||
				n0, n1, d0, q);
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef REMAINDER_IS_ALREADY_CALCULATED
 | 
			
		||||
			/*
 | 
			
		||||
			 * rem doesn't have to be BN_ULLONG. The least we
 | 
			
		||||
			 * know it's less that d0, isn't it?
 | 
			
		||||
			 */
 | 
			
		||||
			rem=(n1-q*d0)&BN_MASK2;
 | 
			
		||||
#endif
 | 
			
		||||
			t2=(BN_ULLONG)d1*q;
 | 
			
		||||
 | 
			
		||||
			for (;;)
 | 
			
		||||
				{
 | 
			
		||||
				if (t2 <= ((((BN_ULLONG)rem)<<BN_BITS2)|wnump[-2]))
 | 
			
		||||
					break;
 | 
			
		||||
				q--;
 | 
			
		||||
				rem += d0;
 | 
			
		||||
				if (rem < d0) break; /* don't let rem overflow */
 | 
			
		||||
				t2 -= d1;
 | 
			
		||||
				}
 | 
			
		||||
#else /* !BN_LLONG */
 | 
			
		||||
			BN_ULONG t2l,t2h,ql,qh;
 | 
			
		||||
 | 
			
		||||
			q=bn_div_words(n0,n1,d0);
 | 
			
		||||
#ifdef BN_DEBUG_LEVITTE
 | 
			
		||||
			fprintf(stderr,"DEBUG: bn_div_words(0x%08X,0x%08X,0x%08\
 | 
			
		||||
X) -> 0x%08X\n",
 | 
			
		||||
				n0, n1, d0, q);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef REMAINDER_IS_ALREADY_CALCULATED
 | 
			
		||||
			rem=(n1-q*d0)&BN_MASK2;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(BN_UMULT_LOHI)
 | 
			
		||||
			BN_UMULT_LOHI(t2l,t2h,d1,q);
 | 
			
		||||
#elif defined(BN_UMULT_HIGH)
 | 
			
		||||
			t2l = d1 * q;
 | 
			
		||||
			t2h = BN_UMULT_HIGH(d1,q);
 | 
			
		||||
#else
 | 
			
		||||
			t2l=LBITS(d1); t2h=HBITS(d1);
 | 
			
		||||
			ql =LBITS(q);  qh =HBITS(q);
 | 
			
		||||
			mul64(t2l,t2h,ql,qh); /* t2=(BN_ULLONG)d1*q; */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
			for (;;)
 | 
			
		||||
				{
 | 
			
		||||
				if ((t2h < rem) ||
 | 
			
		||||
					((t2h == rem) && (t2l <= wnump[-2])))
 | 
			
		||||
					break;
 | 
			
		||||
				q--;
 | 
			
		||||
				rem += d0;
 | 
			
		||||
				if (rem < d0) break; /* don't let rem overflow */
 | 
			
		||||
				if (t2l < d1) t2h--; t2l -= d1;
 | 
			
		||||
				}
 | 
			
		||||
#endif /* !BN_LLONG */
 | 
			
		||||
			}
 | 
			
		||||
#endif /* !BN_DIV3W */
 | 
			
		||||
 | 
			
		||||
		l0=bn_mul_words(tmp->d,sdiv->d,div_n,q);
 | 
			
		||||
		tmp->d[div_n]=l0;
 | 
			
		||||
		wnum.d--;
 | 
			
		||||
		/* ingore top values of the bignums just sub the two 
 | 
			
		||||
		 * BN_ULONG arrays with bn_sub_words */
 | 
			
		||||
		if (bn_sub_words(wnum.d, wnum.d, tmp->d, div_n+1))
 | 
			
		||||
			{
 | 
			
		||||
			/* Note: As we have considered only the leading
 | 
			
		||||
			 * two BN_ULONGs in the calculation of q, sdiv * q
 | 
			
		||||
			 * might be greater than wnum (but then (q-1) * sdiv
 | 
			
		||||
			 * is less or equal than wnum)
 | 
			
		||||
			 */
 | 
			
		||||
			q--;
 | 
			
		||||
			if (bn_add_words(wnum.d, wnum.d, sdiv->d, div_n))
 | 
			
		||||
				/* we can't have an overflow here (assuming
 | 
			
		||||
				 * that q != 0, but if q == 0 then tmp is
 | 
			
		||||
				 * zero anyway) */
 | 
			
		||||
				(*wnump)++;
 | 
			
		||||
			}
 | 
			
		||||
		/* store part of the result */
 | 
			
		||||
		*resp = q;
 | 
			
		||||
		}
 | 
			
		||||
	bn_correct_top(snum);
 | 
			
		||||
	if (rm != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		/* Keep a copy of the neg flag in num because if rm==num
 | 
			
		||||
		 * BN_rshift() will overwrite it.
 | 
			
		||||
		 */
 | 
			
		||||
		int neg = num->neg;
 | 
			
		||||
		BN_rshift(rm,snum,norm_shift);
 | 
			
		||||
		if (!BN_is_zero(rm))
 | 
			
		||||
			rm->neg = neg;
 | 
			
		||||
		bn_check_top(rm);
 | 
			
		||||
		}
 | 
			
		||||
	bn_correct_top(res);
 | 
			
		||||
	BN_CTX_end(ctx);
 | 
			
		||||
	return(1);
 | 
			
		||||
err:
 | 
			
		||||
	bn_check_top(rm);
 | 
			
		||||
	BN_CTX_end(ctx);
 | 
			
		||||
	return(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/* crypto/bn/bn_err.c */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999-2005 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1999-2007 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
 | 
			
		||||
@@ -82,6 +82,7 @@ static ERR_STRING_DATA BN_str_functs[]=
 | 
			
		||||
{ERR_FUNC(BN_F_BN_CTX_NEW),	"BN_CTX_new"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_CTX_START),	"BN_CTX_start"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_DIV),	"BN_div"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_DIV_NO_BRANCH),	"BN_div_no_branch"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_DIV_RECP),	"BN_div_recp"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_EXP),	"BN_exp"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_EXPAND2),	"bn_expand2"},
 | 
			
		||||
@@ -100,6 +101,7 @@ static ERR_STRING_DATA BN_str_functs[]=
 | 
			
		||||
{ERR_FUNC(BN_F_BN_MOD_EXP_RECP),	"BN_mod_exp_recp"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_MOD_EXP_SIMPLE),	"BN_mod_exp_simple"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_MOD_INVERSE),	"BN_mod_inverse"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_MOD_INVERSE_NO_BRANCH),	"BN_mod_inverse_no_branch"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_MOD_LSHIFT_QUICK),	"BN_mod_lshift_quick"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_MOD_MUL_RECIPROCAL),	"BN_mod_mul_reciprocal"},
 | 
			
		||||
{ERR_FUNC(BN_F_BN_MOD_SQRT),	"BN_mod_sqrt"},
 | 
			
		||||
 
 | 
			
		||||
@@ -122,9 +122,9 @@ int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
 | 
			
		||||
	int i,bits,ret=0;
 | 
			
		||||
	BIGNUM *v,*rr;
 | 
			
		||||
 | 
			
		||||
	if (BN_get_flags(p, BN_FLG_EXP_CONSTTIME) != 0)
 | 
			
		||||
	if (BN_get_flags(p, BN_FLG_CONSTTIME) != 0)
 | 
			
		||||
		{
 | 
			
		||||
		/* BN_FLG_EXP_CONSTTIME only supported by BN_mod_exp_mont() */
 | 
			
		||||
		/* BN_FLG_CONSTTIME only supported by BN_mod_exp_mont() */
 | 
			
		||||
		BNerr(BN_F_BN_EXP,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
 | 
			
		||||
		return -1;
 | 
			
		||||
		}
 | 
			
		||||
@@ -213,7 +213,7 @@ int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m,
 | 
			
		||||
	if (BN_is_odd(m))
 | 
			
		||||
		{
 | 
			
		||||
#  ifdef MONT_EXP_WORD
 | 
			
		||||
		if (a->top == 1 && !a->neg && (BN_get_flags(p, BN_FLG_EXP_CONSTTIME) == 0))
 | 
			
		||||
		if (a->top == 1 && !a->neg && (BN_get_flags(p, BN_FLG_CONSTTIME) == 0))
 | 
			
		||||
			{
 | 
			
		||||
			BN_ULONG A = a->d[0];
 | 
			
		||||
			ret=BN_mod_exp_mont_word(r,A,p,m,ctx,NULL);
 | 
			
		||||
@@ -245,9 +245,9 @@ int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
 | 
			
		||||
	BIGNUM *val[TABLE_SIZE];
 | 
			
		||||
	BN_RECP_CTX recp;
 | 
			
		||||
 | 
			
		||||
	if (BN_get_flags(p, BN_FLG_EXP_CONSTTIME) != 0)
 | 
			
		||||
	if (BN_get_flags(p, BN_FLG_CONSTTIME) != 0)
 | 
			
		||||
		{
 | 
			
		||||
		/* BN_FLG_EXP_CONSTTIME only supported by BN_mod_exp_mont() */
 | 
			
		||||
		/* BN_FLG_CONSTTIME only supported by BN_mod_exp_mont() */
 | 
			
		||||
		BNerr(BN_F_BN_MOD_EXP_RECP,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
 | 
			
		||||
		return -1;
 | 
			
		||||
		}
 | 
			
		||||
@@ -379,7 +379,7 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
 | 
			
		||||
	BIGNUM *val[TABLE_SIZE];
 | 
			
		||||
	BN_MONT_CTX *mont=NULL;
 | 
			
		||||
 | 
			
		||||
	if (BN_get_flags(p, BN_FLG_EXP_CONSTTIME) != 0)
 | 
			
		||||
	if (BN_get_flags(p, BN_FLG_CONSTTIME) != 0)
 | 
			
		||||
		{
 | 
			
		||||
		return BN_mod_exp_mont_consttime(rr, a, p, m, ctx, in_mont);
 | 
			
		||||
		}
 | 
			
		||||
@@ -745,9 +745,9 @@ int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p,
 | 
			
		||||
#define BN_TO_MONTGOMERY_WORD(r, w, mont) \
 | 
			
		||||
		(BN_set_word(r, (w)) && BN_to_montgomery(r, r, (mont), ctx))
 | 
			
		||||
 | 
			
		||||
	if (BN_get_flags(p, BN_FLG_EXP_CONSTTIME) != 0)
 | 
			
		||||
	if (BN_get_flags(p, BN_FLG_CONSTTIME) != 0)
 | 
			
		||||
		{
 | 
			
		||||
		/* BN_FLG_EXP_CONSTTIME only supported by BN_mod_exp_mont() */
 | 
			
		||||
		/* BN_FLG_CONSTTIME only supported by BN_mod_exp_mont() */
 | 
			
		||||
		BNerr(BN_F_BN_MOD_EXP_MONT_WORD,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
 | 
			
		||||
		return -1;
 | 
			
		||||
		}
 | 
			
		||||
@@ -881,9 +881,9 @@ int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
 | 
			
		||||
	/* Table of variables obtained from 'ctx' */
 | 
			
		||||
	BIGNUM *val[TABLE_SIZE];
 | 
			
		||||
 | 
			
		||||
	if (BN_get_flags(p, BN_FLG_EXP_CONSTTIME) != 0)
 | 
			
		||||
	if (BN_get_flags(p, BN_FLG_CONSTTIME) != 0)
 | 
			
		||||
		{
 | 
			
		||||
		/* BN_FLG_EXP_CONSTTIME only supported by BN_mod_exp_mont() */
 | 
			
		||||
		/* BN_FLG_CONSTTIME only supported by BN_mod_exp_mont() */
 | 
			
		||||
		BNerr(BN_F_BN_MOD_EXP_SIMPLE,ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
 | 
			
		||||
		return -1;
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -203,6 +203,8 @@ err:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* solves ax == 1 (mod n) */
 | 
			
		||||
static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
 | 
			
		||||
        const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx);
 | 
			
		||||
BIGNUM *BN_mod_inverse(BIGNUM *in,
 | 
			
		||||
	const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
@@ -210,6 +212,11 @@ BIGNUM *BN_mod_inverse(BIGNUM *in,
 | 
			
		||||
	BIGNUM *ret=NULL;
 | 
			
		||||
	int sign;
 | 
			
		||||
 | 
			
		||||
	if ((BN_get_flags(a, BN_FLG_CONSTTIME) != 0) || (BN_get_flags(n, BN_FLG_CONSTTIME) != 0))
 | 
			
		||||
		{
 | 
			
		||||
		return BN_mod_inverse_no_branch(in, a, n, ctx);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	bn_check_top(a);
 | 
			
		||||
	bn_check_top(n);
 | 
			
		||||
 | 
			
		||||
@@ -491,3 +498,157 @@ err:
 | 
			
		||||
	bn_check_top(ret);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* BN_mod_inverse_no_branch is a special version of BN_mod_inverse. 
 | 
			
		||||
 * It does not contain branches that may leak sensitive information.
 | 
			
		||||
 */
 | 
			
		||||
static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
 | 
			
		||||
	const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
	BIGNUM *A,*B,*X,*Y,*M,*D,*T,*R=NULL;
 | 
			
		||||
	BIGNUM local_A, local_B;
 | 
			
		||||
	BIGNUM *pA, *pB;
 | 
			
		||||
	BIGNUM *ret=NULL;
 | 
			
		||||
	int sign;
 | 
			
		||||
 | 
			
		||||
	bn_check_top(a);
 | 
			
		||||
	bn_check_top(n);
 | 
			
		||||
 | 
			
		||||
	BN_CTX_start(ctx);
 | 
			
		||||
	A = BN_CTX_get(ctx);
 | 
			
		||||
	B = BN_CTX_get(ctx);
 | 
			
		||||
	X = BN_CTX_get(ctx);
 | 
			
		||||
	D = BN_CTX_get(ctx);
 | 
			
		||||
	M = BN_CTX_get(ctx);
 | 
			
		||||
	Y = BN_CTX_get(ctx);
 | 
			
		||||
	T = BN_CTX_get(ctx);
 | 
			
		||||
	if (T == NULL) goto err;
 | 
			
		||||
 | 
			
		||||
	if (in == NULL)
 | 
			
		||||
		R=BN_new();
 | 
			
		||||
	else
 | 
			
		||||
		R=in;
 | 
			
		||||
	if (R == NULL) goto err;
 | 
			
		||||
 | 
			
		||||
	BN_one(X);
 | 
			
		||||
	BN_zero(Y);
 | 
			
		||||
	if (BN_copy(B,a) == NULL) goto err;
 | 
			
		||||
	if (BN_copy(A,n) == NULL) goto err;
 | 
			
		||||
	A->neg = 0;
 | 
			
		||||
 | 
			
		||||
	if (B->neg || (BN_ucmp(B, A) >= 0))
 | 
			
		||||
		{
 | 
			
		||||
		/* Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked,
 | 
			
		||||
	 	 * BN_div_no_branch will be called eventually.
 | 
			
		||||
	 	 */
 | 
			
		||||
		pB = &local_B;
 | 
			
		||||
		BN_with_flags(pB, B, BN_FLG_CONSTTIME);	
 | 
			
		||||
		if (!BN_nnmod(B, pB, A, ctx)) goto err;
 | 
			
		||||
		}
 | 
			
		||||
	sign = -1;
 | 
			
		||||
	/* From  B = a mod |n|,  A = |n|  it follows that
 | 
			
		||||
	 *
 | 
			
		||||
	 *      0 <= B < A,
 | 
			
		||||
	 *     -sign*X*a  ==  B   (mod |n|),
 | 
			
		||||
	 *      sign*Y*a  ==  A   (mod |n|).
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	while (!BN_is_zero(B))
 | 
			
		||||
		{
 | 
			
		||||
		BIGNUM *tmp;
 | 
			
		||||
		
 | 
			
		||||
		/*
 | 
			
		||||
		 *      0 < B < A,
 | 
			
		||||
		 * (*) -sign*X*a  ==  B   (mod |n|),
 | 
			
		||||
		 *      sign*Y*a  ==  A   (mod |n|)
 | 
			
		||||
		 */
 | 
			
		||||
 | 
			
		||||
		/* Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked,
 | 
			
		||||
	 	 * BN_div_no_branch will be called eventually.
 | 
			
		||||
	 	 */
 | 
			
		||||
		pA = &local_A;
 | 
			
		||||
		BN_with_flags(pA, A, BN_FLG_CONSTTIME);	
 | 
			
		||||
		
 | 
			
		||||
		/* (D, M) := (A/B, A%B) ... */		
 | 
			
		||||
		if (!BN_div(D,M,pA,B,ctx)) goto err;
 | 
			
		||||
		
 | 
			
		||||
		/* Now
 | 
			
		||||
		 *      A = D*B + M;
 | 
			
		||||
		 * thus we have
 | 
			
		||||
		 * (**)  sign*Y*a  ==  D*B + M   (mod |n|).
 | 
			
		||||
		 */
 | 
			
		||||
		
 | 
			
		||||
		tmp=A; /* keep the BIGNUM object, the value does not matter */
 | 
			
		||||
		
 | 
			
		||||
		/* (A, B) := (B, A mod B) ... */
 | 
			
		||||
		A=B;
 | 
			
		||||
		B=M;
 | 
			
		||||
		/* ... so we have  0 <= B < A  again */
 | 
			
		||||
		
 | 
			
		||||
		/* Since the former  M  is now  B  and the former  B  is now  A,
 | 
			
		||||
		 * (**) translates into
 | 
			
		||||
		 *       sign*Y*a  ==  D*A + B    (mod |n|),
 | 
			
		||||
		 * i.e.
 | 
			
		||||
		 *       sign*Y*a - D*A  ==  B    (mod |n|).
 | 
			
		||||
		 * Similarly, (*) translates into
 | 
			
		||||
		 *      -sign*X*a  ==  A          (mod |n|).
 | 
			
		||||
		 *
 | 
			
		||||
		 * Thus,
 | 
			
		||||
		 *   sign*Y*a + D*sign*X*a  ==  B  (mod |n|),
 | 
			
		||||
		 * i.e.
 | 
			
		||||
		 *        sign*(Y + D*X)*a  ==  B  (mod |n|).
 | 
			
		||||
		 *
 | 
			
		||||
		 * So if we set  (X, Y, sign) := (Y + D*X, X, -sign),  we arrive back at
 | 
			
		||||
		 *      -sign*X*a  ==  B   (mod |n|),
 | 
			
		||||
		 *       sign*Y*a  ==  A   (mod |n|).
 | 
			
		||||
		 * Note that  X  and  Y  stay non-negative all the time.
 | 
			
		||||
		 */
 | 
			
		||||
			
 | 
			
		||||
		if (!BN_mul(tmp,D,X,ctx)) goto err;
 | 
			
		||||
		if (!BN_add(tmp,tmp,Y)) goto err;
 | 
			
		||||
 | 
			
		||||
		M=Y; /* keep the BIGNUM object, the value does not matter */
 | 
			
		||||
		Y=X;
 | 
			
		||||
		X=tmp;
 | 
			
		||||
		sign = -sign;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	/*
 | 
			
		||||
	 * The while loop (Euclid's algorithm) ends when
 | 
			
		||||
	 *      A == gcd(a,n);
 | 
			
		||||
	 * we have
 | 
			
		||||
	 *       sign*Y*a  ==  A  (mod |n|),
 | 
			
		||||
	 * where  Y  is non-negative.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	if (sign < 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (!BN_sub(Y,n,Y)) goto err;
 | 
			
		||||
		}
 | 
			
		||||
	/* Now  Y*a  ==  A  (mod |n|).  */
 | 
			
		||||
 | 
			
		||||
	if (BN_is_one(A))
 | 
			
		||||
		{
 | 
			
		||||
		/* Y*a == 1  (mod |n|) */
 | 
			
		||||
		if (!Y->neg && BN_ucmp(Y,n) < 0)
 | 
			
		||||
			{
 | 
			
		||||
			if (!BN_copy(R,Y)) goto err;
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			if (!BN_nnmod(R,Y,n,ctx)) goto err;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		BNerr(BN_F_BN_MOD_INVERSE_NO_BRANCH,BN_R_NO_INVERSE);
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	ret=R;
 | 
			
		||||
err:
 | 
			
		||||
	if ((ret == NULL) && (in == NULL)) BN_free(R);
 | 
			
		||||
	BN_CTX_end(ctx);
 | 
			
		||||
	bn_check_top(ret);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -481,6 +481,7 @@ BN_ULONG bn_add_part_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b,
 | 
			
		||||
	int cl, int dl);
 | 
			
		||||
BN_ULONG bn_sub_part_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b,
 | 
			
		||||
	int cl, int dl);
 | 
			
		||||
int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np,const BN_ULONG *n0, int num);
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -139,25 +139,6 @@ const BIGNUM *BN_value_one(void)
 | 
			
		||||
	return(&const_one);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
char *BN_options(void)
 | 
			
		||||
	{
 | 
			
		||||
	static int init=0;
 | 
			
		||||
	static char data[16];
 | 
			
		||||
 | 
			
		||||
	if (!init)
 | 
			
		||||
		{
 | 
			
		||||
		init++;
 | 
			
		||||
#ifdef BN_LLONG
 | 
			
		||||
		BIO_snprintf(data,sizeof data,"bn(%d,%d)",
 | 
			
		||||
			     (int)sizeof(BN_ULLONG)*8,(int)sizeof(BN_ULONG)*8);
 | 
			
		||||
#else
 | 
			
		||||
		BIO_snprintf(data,sizeof data,"bn(%d,%d)",
 | 
			
		||||
			     (int)sizeof(BN_ULONG)*8,(int)sizeof(BN_ULONG)*8);
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	return(data);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int BN_num_bits_word(BN_ULONG l)
 | 
			
		||||
	{
 | 
			
		||||
	static const char bits[256]={
 | 
			
		||||
@@ -763,7 +744,7 @@ int BN_is_bit_set(const BIGNUM *a, int n)
 | 
			
		||||
	i=n/BN_BITS2;
 | 
			
		||||
	j=n%BN_BITS2;
 | 
			
		||||
	if (a->top <= i) return 0;
 | 
			
		||||
	return((a->d[i]&(((BN_ULONG)1)<<j))?1:0);
 | 
			
		||||
	return(((a->d[i])>>j)&((BN_ULONG)1));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int BN_mask_bits(BIGNUM *a, int n)
 | 
			
		||||
 
 | 
			
		||||
@@ -127,6 +127,21 @@ int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
 | 
			
		||||
	{
 | 
			
		||||
	BIGNUM *tmp;
 | 
			
		||||
	int ret=0;
 | 
			
		||||
#if defined(OPENSSL_BN_ASM_MONT) && defined(MONT_WORD)
 | 
			
		||||
	int num = mont->N.top;
 | 
			
		||||
 | 
			
		||||
	if (num>1 && a->top==num && b->top==num)
 | 
			
		||||
		{
 | 
			
		||||
		if (bn_wexpand(r,num) == NULL) return(0);
 | 
			
		||||
		if (bn_mul_mont(r->d,a->d,b->d,mont->N.d,&mont->n0,num))
 | 
			
		||||
			{
 | 
			
		||||
			r->neg = a->neg^b->neg;
 | 
			
		||||
			r->top = num;
 | 
			
		||||
			bn_correct_top(r);
 | 
			
		||||
			return(1);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	BN_CTX_start(ctx);
 | 
			
		||||
	tmp = BN_CTX_get(ctx);
 | 
			
		||||
@@ -176,7 +191,6 @@ int BN_from_montgomery(BIGNUM *ret, const BIGNUM *a, BN_MONT_CTX *mont,
 | 
			
		||||
 | 
			
		||||
	max=(nl+al+1); /* allow for overflow (no?) XXX */
 | 
			
		||||
	if (bn_wexpand(r,max) == NULL) goto err;
 | 
			
		||||
	if (bn_wexpand(ret,max) == NULL) goto err;
 | 
			
		||||
 | 
			
		||||
	r->neg=a->neg^n->neg;
 | 
			
		||||
	np=n->d;
 | 
			
		||||
@@ -228,19 +242,72 @@ int BN_from_montgomery(BIGNUM *ret, const BIGNUM *a, BN_MONT_CTX *mont,
 | 
			
		||||
		}
 | 
			
		||||
	bn_correct_top(r);
 | 
			
		||||
	
 | 
			
		||||
	/* mont->ri will be a multiple of the word size */
 | 
			
		||||
#if 0
 | 
			
		||||
	BN_rshift(ret,r,mont->ri);
 | 
			
		||||
#else
 | 
			
		||||
	ret->neg = r->neg;
 | 
			
		||||
	x=ri;
 | 
			
		||||
	/* mont->ri will be a multiple of the word size and below code
 | 
			
		||||
	 * is kind of BN_rshift(ret,r,mont->ri) equivalent */
 | 
			
		||||
	if (r->top <= ri)
 | 
			
		||||
		{
 | 
			
		||||
		ret->top=0;
 | 
			
		||||
		retn=1;
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	al=r->top-ri;
 | 
			
		||||
 | 
			
		||||
# define BRANCH_FREE 1
 | 
			
		||||
# if BRANCH_FREE
 | 
			
		||||
	if (bn_wexpand(ret,ri) == NULL) goto err;
 | 
			
		||||
	x=0-(((al-ri)>>(sizeof(al)*8-1))&1);
 | 
			
		||||
	ret->top=x=(ri&~x)|(al&x);	/* min(ri,al) */
 | 
			
		||||
	ret->neg=r->neg;
 | 
			
		||||
 | 
			
		||||
	rp=ret->d;
 | 
			
		||||
	ap= &(r->d[x]);
 | 
			
		||||
	if (r->top < x)
 | 
			
		||||
		al=0;
 | 
			
		||||
	else
 | 
			
		||||
		al=r->top-x;
 | 
			
		||||
	ap=&(r->d[ri]);
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
	size_t m1,m2;
 | 
			
		||||
 | 
			
		||||
	v=bn_sub_words(rp,ap,np,ri);
 | 
			
		||||
	/* this ----------------^^ works even in al<ri case
 | 
			
		||||
	 * thanks to zealous zeroing of top of the vector in the
 | 
			
		||||
	 * beginning. */
 | 
			
		||||
 | 
			
		||||
	/* if (al==ri && !v) || al>ri) nrp=rp; else nrp=ap; */
 | 
			
		||||
	/* in other words if subtraction result is real, then
 | 
			
		||||
	 * trick unconditional memcpy below to perform in-place
 | 
			
		||||
	 * "refresh" instead of actual copy. */
 | 
			
		||||
	m1=0-(size_t)(((al-ri)>>(sizeof(al)*8-1))&1);	/* al<ri */
 | 
			
		||||
	m2=0-(size_t)(((ri-al)>>(sizeof(al)*8-1))&1);	/* al>ri */
 | 
			
		||||
	m1|=m2;			/* (al!=ri) */
 | 
			
		||||
	m1|=(0-(size_t)v);	/* (al!=ri || v) */
 | 
			
		||||
	m1&=~m2;		/* (al!=ri || v) && !al>ri */
 | 
			
		||||
	nrp=(BN_ULONG *)(((size_t)rp&~m1)|((size_t)ap&m1));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* 'i<ri' is chosen to eliminate dependency on input data, even
 | 
			
		||||
	 * though it results in redundant copy in al<ri case. */
 | 
			
		||||
	for (i=0,ri-=4; i<ri; i+=4)
 | 
			
		||||
		{
 | 
			
		||||
		BN_ULONG t1,t2,t3,t4;
 | 
			
		||||
		
 | 
			
		||||
		t1=nrp[i+0];
 | 
			
		||||
		t2=nrp[i+1];
 | 
			
		||||
		t3=nrp[i+2];	ap[i+0]=0;
 | 
			
		||||
		t4=nrp[i+3];	ap[i+1]=0;
 | 
			
		||||
		rp[i+0]=t1;	ap[i+2]=0;
 | 
			
		||||
		rp[i+1]=t2;	ap[i+3]=0;
 | 
			
		||||
		rp[i+2]=t3;
 | 
			
		||||
		rp[i+3]=t4;
 | 
			
		||||
		}
 | 
			
		||||
	for (ri+=4; i<ri; i++)
 | 
			
		||||
		rp[i]=nrp[i], ap[i]=0;
 | 
			
		||||
	bn_correct_top(r);
 | 
			
		||||
	bn_correct_top(ret);
 | 
			
		||||
# else
 | 
			
		||||
	if (bn_wexpand(ret,al) == NULL) goto err;
 | 
			
		||||
	ret->top=al;
 | 
			
		||||
	ret->neg=r->neg;
 | 
			
		||||
 | 
			
		||||
	rp=ret->d;
 | 
			
		||||
	ap=&(r->d[ri]);
 | 
			
		||||
	al-=4;
 | 
			
		||||
	for (i=0; i<al; i+=4)
 | 
			
		||||
		{
 | 
			
		||||
@@ -258,7 +325,7 @@ int BN_from_montgomery(BIGNUM *ret, const BIGNUM *a, BN_MONT_CTX *mont,
 | 
			
		||||
	al+=4;
 | 
			
		||||
	for (; i<al; i++)
 | 
			
		||||
		rp[i]=ap[i];
 | 
			
		||||
#endif
 | 
			
		||||
# endif
 | 
			
		||||
#else /* !MONT_WORD */ 
 | 
			
		||||
	BIGNUM *t1,*t2;
 | 
			
		||||
 | 
			
		||||
@@ -278,10 +345,12 @@ int BN_from_montgomery(BIGNUM *ret, const BIGNUM *a, BN_MONT_CTX *mont,
 | 
			
		||||
	if (!BN_rshift(ret,t2,mont->ri)) goto err;
 | 
			
		||||
#endif /* MONT_WORD */
 | 
			
		||||
 | 
			
		||||
#if !defined(BRANCH_FREE) || BRANCH_FREE==0
 | 
			
		||||
	if (BN_ucmp(ret, &(mont->N)) >= 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (!BN_usub(ret,ret,&(mont->N))) goto err;
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	retn=1;
 | 
			
		||||
	bn_check_top(ret);
 | 
			
		||||
 err:
 | 
			
		||||
 
 | 
			
		||||
@@ -655,16 +655,16 @@ void bn_mul_part_recursive(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n,
 | 
			
		||||
				for (;;)
 | 
			
		||||
					{
 | 
			
		||||
					i/=2;
 | 
			
		||||
					if (i < tna && i < tnb)
 | 
			
		||||
					if (i <= tna && tna == tnb)
 | 
			
		||||
						{
 | 
			
		||||
						bn_mul_part_recursive(&(r[n2]),
 | 
			
		||||
						bn_mul_recursive(&(r[n2]),
 | 
			
		||||
							&(a[n]),&(b[n]),
 | 
			
		||||
							i,tna-i,tnb-i,p);
 | 
			
		||||
						break;
 | 
			
		||||
						}
 | 
			
		||||
					else if (i <= tna && i <= tnb)
 | 
			
		||||
					else if (i < tna || i < tnb)
 | 
			
		||||
						{
 | 
			
		||||
						bn_mul_recursive(&(r[n2]),
 | 
			
		||||
						bn_mul_part_recursive(&(r[n2]),
 | 
			
		||||
							&(a[n]),&(b[n]),
 | 
			
		||||
							i,tna-i,tnb-i,p);
 | 
			
		||||
						break;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										87
									
								
								crypto/bn/bn_opt.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								crypto/bn/bn_opt.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
			
		||||
/* crypto/bn/bn_opt.c */
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *    "This product includes cryptographic software written by
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef BN_DEBUG
 | 
			
		||||
# undef NDEBUG /* avoid conflicting definitions */
 | 
			
		||||
# define NDEBUG
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "cryptlib.h"
 | 
			
		||||
#include "bn_lcl.h"
 | 
			
		||||
 | 
			
		||||
char *BN_options(void)
 | 
			
		||||
	{
 | 
			
		||||
	static int init=0;
 | 
			
		||||
	static char data[16];
 | 
			
		||||
 | 
			
		||||
	if (!init)
 | 
			
		||||
		{
 | 
			
		||||
		init++;
 | 
			
		||||
#ifdef BN_LLONG
 | 
			
		||||
		BIO_snprintf(data,sizeof data,"bn(%d,%d)",
 | 
			
		||||
			     (int)sizeof(BN_ULLONG)*8,(int)sizeof(BN_ULONG)*8);
 | 
			
		||||
#else
 | 
			
		||||
		BIO_snprintf(data,sizeof data,"bn(%d,%d)",
 | 
			
		||||
			     (int)sizeof(BN_ULONG)*8,(int)sizeof(BN_ULONG)*8);
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
	return(data);
 | 
			
		||||
	}
 | 
			
		||||
@@ -377,14 +377,14 @@ static int witness(BIGNUM *w, const BIGNUM *a, const BIGNUM *a1,
 | 
			
		||||
static int probable_prime(BIGNUM *rnd, int bits)
 | 
			
		||||
	{
 | 
			
		||||
	int i;
 | 
			
		||||
	BN_ULONG mods[NUMPRIMES];
 | 
			
		||||
	prime_t mods[NUMPRIMES];
 | 
			
		||||
	BN_ULONG delta,maxdelta;
 | 
			
		||||
 | 
			
		||||
again:
 | 
			
		||||
	if (!BN_rand(rnd,bits,1,1)) return(0);
 | 
			
		||||
	/* we now have a random number 'rand' to test. */
 | 
			
		||||
	for (i=1; i<NUMPRIMES; i++)
 | 
			
		||||
		mods[i]=BN_mod_word(rnd,(BN_ULONG)primes[i]);
 | 
			
		||||
		mods[i]=(prime_t)BN_mod_word(rnd,(BN_ULONG)primes[i]);
 | 
			
		||||
	maxdelta=BN_MASK2 - primes[NUMPRIMES-1];
 | 
			
		||||
	delta=0;
 | 
			
		||||
	loop: for (i=1; i<NUMPRIMES; i++)
 | 
			
		||||
 
 | 
			
		||||
@@ -58,10 +58,12 @@
 | 
			
		||||
 | 
			
		||||
#ifndef EIGHT_BIT
 | 
			
		||||
#define NUMPRIMES 2048
 | 
			
		||||
typedef unsigned short prime_t;
 | 
			
		||||
#else
 | 
			
		||||
#define NUMPRIMES 54
 | 
			
		||||
typedef unsigned char prime_t;
 | 
			
		||||
#endif
 | 
			
		||||
static const unsigned int primes[NUMPRIMES]=
 | 
			
		||||
static const prime_t primes[NUMPRIMES]=
 | 
			
		||||
	{
 | 
			
		||||
	   2,   3,   5,   7,  11,  13,  17,  19,
 | 
			
		||||
	  23,  29,  31,  37,  41,  43,  47,  53,
 | 
			
		||||
 
 | 
			
		||||
@@ -101,10 +101,12 @@ for ($i=0; $i <= $#primes; $i++)
 | 
			
		||||
 | 
			
		||||
printf "#ifndef EIGHT_BIT\n";
 | 
			
		||||
printf "#define NUMPRIMES %d\n",$num;
 | 
			
		||||
printf "typedef unsigned short prime_t;\n";
 | 
			
		||||
printf "#else\n";
 | 
			
		||||
printf "#define NUMPRIMES %d\n",$eight;
 | 
			
		||||
printf "typedef unsigned char prime_t;\n";
 | 
			
		||||
printf "#endif\n";
 | 
			
		||||
print "static const unsigned int primes[NUMPRIMES]=\n\t{\n\t";
 | 
			
		||||
print "static const prime_t primes[NUMPRIMES]=\n\t{\n\t";
 | 
			
		||||
$init=0;
 | 
			
		||||
for ($i=0; $i <= $#primes; $i++)
 | 
			
		||||
	{
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										272
									
								
								crypto/bn/bn_x931p.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										272
									
								
								crypto/bn/bn_x931p.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,272 @@
 | 
			
		||||
/* bn_x931p.c */
 | 
			
		||||
/* Written by Dr Stephen N Henson (shenson@bigfoot.com) for the OpenSSL
 | 
			
		||||
 * project 2005.
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2005 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    licensing@OpenSSL.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
 | 
			
		||||
/* X9.31 routines for prime derivation */
 | 
			
		||||
 | 
			
		||||
/* X9.31 prime derivation. This is used to generate the primes pi
 | 
			
		||||
 * (p1, p2, q1, q2) from a parameter Xpi by checking successive odd
 | 
			
		||||
 * integers.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int bn_x931_derive_pi(BIGNUM *pi, const BIGNUM *Xpi, BN_CTX *ctx,
 | 
			
		||||
			BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	int i = 0;
 | 
			
		||||
	if (!BN_copy(pi, Xpi))
 | 
			
		||||
		return 0;
 | 
			
		||||
	if (!BN_is_odd(pi) && !BN_add_word(pi, 1))
 | 
			
		||||
		return 0;
 | 
			
		||||
	for(;;)
 | 
			
		||||
		{
 | 
			
		||||
		i++;
 | 
			
		||||
		BN_GENCB_call(cb, 0, i);
 | 
			
		||||
		/* NB 27 MR is specificed in X9.31 */
 | 
			
		||||
		if (BN_is_prime_fasttest_ex(pi, 27, ctx, 1, cb))
 | 
			
		||||
			break;
 | 
			
		||||
		if (!BN_add_word(pi, 2))
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
	BN_GENCB_call(cb, 2, i);
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/* This is the main X9.31 prime derivation function. From parameters
 | 
			
		||||
 * Xp1, Xp2 and Xp derive the prime p. If the parameters p1 or p2 are
 | 
			
		||||
 * not NULL they will be returned too: this is needed for testing.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
 | 
			
		||||
			const BIGNUM *Xp, const BIGNUM *Xp1, const BIGNUM *Xp2,
 | 
			
		||||
			const BIGNUM *e, BN_CTX *ctx, BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
 | 
			
		||||
	BIGNUM *t, *p1p2, *pm1;
 | 
			
		||||
 | 
			
		||||
	/* Only even e supported */
 | 
			
		||||
	if (!BN_is_odd(e))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	BN_CTX_start(ctx);
 | 
			
		||||
	if (!p1)
 | 
			
		||||
		p1 = BN_CTX_get(ctx);
 | 
			
		||||
 | 
			
		||||
	if (!p2)
 | 
			
		||||
		p2 = BN_CTX_get(ctx);
 | 
			
		||||
 | 
			
		||||
	t = BN_CTX_get(ctx);
 | 
			
		||||
 | 
			
		||||
	p1p2 = BN_CTX_get(ctx);
 | 
			
		||||
 | 
			
		||||
	pm1 = BN_CTX_get(ctx);
 | 
			
		||||
 | 
			
		||||
	if (!bn_x931_derive_pi(p1, Xp1, ctx, cb))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (!bn_x931_derive_pi(p2, Xp2, ctx, cb))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BN_mul(p1p2, p1, p2, ctx))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	/* First set p to value of Rp */
 | 
			
		||||
 | 
			
		||||
	if (!BN_mod_inverse(p, p2, p1, ctx))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BN_mul(p, p, p2, ctx))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BN_mod_inverse(t, p1, p2, ctx))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BN_mul(t, t, p1, ctx))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BN_sub(p, p, t))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (p->neg && !BN_add(p, p, p1p2))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	/* p now equals Rp */
 | 
			
		||||
 | 
			
		||||
	if (!BN_mod_sub(p, p, Xp, p1p2, ctx))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BN_add(p, p, Xp))
 | 
			
		||||
		goto err;
 | 
			
		||||
 | 
			
		||||
	/* p now equals Yp0 */
 | 
			
		||||
 | 
			
		||||
	for (;;)
 | 
			
		||||
		{
 | 
			
		||||
		int i = 1;
 | 
			
		||||
		BN_GENCB_call(cb, 0, i++);
 | 
			
		||||
		if (!BN_copy(pm1, p))
 | 
			
		||||
			goto err;
 | 
			
		||||
		if (!BN_sub_word(pm1, 1))
 | 
			
		||||
			goto err;
 | 
			
		||||
		if (!BN_gcd(t, pm1, e, ctx))
 | 
			
		||||
			goto err;
 | 
			
		||||
		if (BN_is_one(t)
 | 
			
		||||
		/* X9.31 specifies 8 MR and 1 Lucas test or any prime test
 | 
			
		||||
		 * offering similar or better guarantees 50 MR is considerably 
 | 
			
		||||
		 * better.
 | 
			
		||||
		 */
 | 
			
		||||
			&& BN_is_prime_fasttest_ex(p, 50, ctx, 1, cb))
 | 
			
		||||
			break;
 | 
			
		||||
		if (!BN_add(p, p, p1p2))
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	BN_GENCB_call(cb, 3, 0);
 | 
			
		||||
 | 
			
		||||
	ret = 1;
 | 
			
		||||
 | 
			
		||||
	err:
 | 
			
		||||
 | 
			
		||||
	BN_CTX_end(ctx);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/* Generate pair of paramters Xp, Xq for X9.31 prime generation.
 | 
			
		||||
 * Note: nbits paramter is sum of number of bits in both.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
	BIGNUM *t;
 | 
			
		||||
	int i;
 | 
			
		||||
	/* Number of bits for each prime is of the form
 | 
			
		||||
	 * 512+128s for s = 0, 1, ...
 | 
			
		||||
	 */
 | 
			
		||||
	if ((nbits < 1024) || (nbits & 0xff))
 | 
			
		||||
		return 0;
 | 
			
		||||
	nbits >>= 1;
 | 
			
		||||
	/* The random value Xp must be between sqrt(2) * 2^(nbits-1) and
 | 
			
		||||
	 * 2^nbits - 1. By setting the top two bits we ensure that the lower
 | 
			
		||||
	 * bound is exceeded.
 | 
			
		||||
	 */
 | 
			
		||||
	if (!BN_rand(Xp, nbits, 1, 0))
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	BN_CTX_start(ctx);
 | 
			
		||||
	t = BN_CTX_get(ctx);
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < 1000; i++)
 | 
			
		||||
		{
 | 
			
		||||
		if (!BN_rand(Xq, nbits, 1, 0))
 | 
			
		||||
			return 0;
 | 
			
		||||
		/* Check that |Xp - Xq| > 2^(nbits - 100) */
 | 
			
		||||
		BN_sub(t, Xp, Xq);
 | 
			
		||||
		if (BN_num_bits(t) > (nbits - 100))
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	BN_CTX_end(ctx);
 | 
			
		||||
 | 
			
		||||
	if (i < 1000)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
/* Generate primes using X9.31 algorithm. Of the values p, p1, p2, Xp1
 | 
			
		||||
 * and Xp2 only 'p' needs to be non-NULL. If any of the others are not NULL
 | 
			
		||||
 * the relevant parameter will be stored in it.
 | 
			
		||||
 *
 | 
			
		||||
 * Due to the fact that |Xp - Xq| > 2^(nbits - 100) must be satisfied Xp and Xq
 | 
			
		||||
 * are generated using the previous function and supplied as input.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2,
 | 
			
		||||
			BIGNUM *Xp1, BIGNUM *Xp2,
 | 
			
		||||
			const BIGNUM *Xp,
 | 
			
		||||
			const BIGNUM *e, BN_CTX *ctx,
 | 
			
		||||
			BN_GENCB *cb)
 | 
			
		||||
	{
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
 | 
			
		||||
	BN_CTX_start(ctx);
 | 
			
		||||
	if (!Xp1)
 | 
			
		||||
		Xp1 = BN_CTX_get(ctx);
 | 
			
		||||
	if (!Xp2)
 | 
			
		||||
		Xp2 = BN_CTX_get(ctx);
 | 
			
		||||
 | 
			
		||||
	if (!BN_rand(Xp1, 101, 0, 0))
 | 
			
		||||
		goto error;
 | 
			
		||||
	if (!BN_rand(Xp2, 101, 0, 0))
 | 
			
		||||
		goto error;
 | 
			
		||||
	if (!BN_X931_derive_prime_ex(p, p1, p2, Xp, Xp1, Xp2, e, ctx, cb))
 | 
			
		||||
		goto error;
 | 
			
		||||
 | 
			
		||||
	ret = 1;
 | 
			
		||||
 | 
			
		||||
	error:
 | 
			
		||||
	BN_CTX_end(ctx);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -184,120 +184,120 @@ int main(int argc, char *argv[])
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_add");
 | 
			
		||||
	if (!test_add(out)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_sub");
 | 
			
		||||
	if (!test_sub(out)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_lshift1");
 | 
			
		||||
	if (!test_lshift1(out)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_lshift (fixed)");
 | 
			
		||||
	if (!test_lshift(out,ctx,BN_bin2bn(lst,sizeof(lst)-1,NULL)))
 | 
			
		||||
	    goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_lshift");
 | 
			
		||||
	if (!test_lshift(out,ctx,NULL)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_rshift1");
 | 
			
		||||
	if (!test_rshift1(out)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_rshift");
 | 
			
		||||
	if (!test_rshift(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_sqr");
 | 
			
		||||
	if (!test_sqr(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_mul");
 | 
			
		||||
	if (!test_mul(out)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_div");
 | 
			
		||||
	if (!test_div(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_div_word");
 | 
			
		||||
	if (!test_div_word(out)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_div_recp");
 | 
			
		||||
	if (!test_div_recp(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_mod");
 | 
			
		||||
	if (!test_mod(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_mod_mul");
 | 
			
		||||
	if (!test_mod_mul(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_mont");
 | 
			
		||||
	if (!test_mont(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_mod_exp");
 | 
			
		||||
	if (!test_mod_exp(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_mod_exp_mont_consttime");
 | 
			
		||||
	if (!test_mod_exp_mont_consttime(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_exp");
 | 
			
		||||
	if (!test_exp(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_kronecker");
 | 
			
		||||
	if (!test_kron(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_mod_sqrt");
 | 
			
		||||
	if (!test_sqrt(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_GF2m_add");
 | 
			
		||||
	if (!test_gf2m_add(out)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_GF2m_mod");
 | 
			
		||||
	if (!test_gf2m_mod(out)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_GF2m_mod_mul");
 | 
			
		||||
	if (!test_gf2m_mod_mul(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_GF2m_mod_sqr");
 | 
			
		||||
	if (!test_gf2m_mod_sqr(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_GF2m_mod_inv");
 | 
			
		||||
	if (!test_gf2m_mod_inv(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_GF2m_mod_div");
 | 
			
		||||
	if (!test_gf2m_mod_div(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_GF2m_mod_exp");
 | 
			
		||||
	if (!test_gf2m_mod_exp(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_GF2m_mod_sqrt");
 | 
			
		||||
	if (!test_gf2m_mod_sqrt(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	message(out,"BN_GF2m_mod_solve_quad");
 | 
			
		||||
	if (!test_gf2m_mod_solve_quad(out,ctx)) goto err;
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
 | 
			
		||||
	BN_CTX_free(ctx);
 | 
			
		||||
	BIO_free(out);
 | 
			
		||||
@@ -307,7 +307,7 @@ int main(int argc, char *argv[])
 | 
			
		||||
err:
 | 
			
		||||
	BIO_puts(out,"1\n"); /* make sure the Perl script fed by bc notices
 | 
			
		||||
	                      * the failure, see test_bn in test/Makefile.ssl*/
 | 
			
		||||
	BIO_flush(out);
 | 
			
		||||
	(void)BIO_flush(out);
 | 
			
		||||
	ERR_load_crypto_strings();
 | 
			
		||||
	ERR_print_errors_fp(stderr);
 | 
			
		||||
	EXIT(1);
 | 
			
		||||
 
 | 
			
		||||
@@ -17,8 +17,8 @@ TEST=
 | 
			
		||||
APPS=
 | 
			
		||||
 | 
			
		||||
LIB=$(TOP)/libcrypto.a
 | 
			
		||||
LIBSRC= buffer.c buf_err.c
 | 
			
		||||
LIBOBJ= buffer.o buf_err.o
 | 
			
		||||
LIBSRC= buffer.c buf_str.c buf_err.c
 | 
			
		||||
LIBOBJ= buffer.o buf_str.o buf_err.o
 | 
			
		||||
 | 
			
		||||
SRC= $(LIBSRC)
 | 
			
		||||
 | 
			
		||||
@@ -33,7 +33,7 @@ top:
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
@@ -81,6 +81,13 @@ buf_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
buf_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
 | 
			
		||||
buf_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
buf_err.o: buf_err.c
 | 
			
		||||
buf_str.o: ../../e_os.h ../../include/openssl/bio.h
 | 
			
		||||
buf_str.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
buf_str.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 | 
			
		||||
buf_str.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
buf_str.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
buf_str.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
buf_str.o: ../../include/openssl/symhacks.h ../cryptlib.h buf_str.c
 | 
			
		||||
buffer.o: ../../e_os.h ../../include/openssl/bio.h
 | 
			
		||||
buffer.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
buffer.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										116
									
								
								crypto/buffer/buf_str.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								crypto/buffer/buf_str.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
			
		||||
/* crypto/buffer/buf_str.c */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2007 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer. 
 | 
			
		||||
 *
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in
 | 
			
		||||
 *    the documentation and/or other materials provided with the
 | 
			
		||||
 *    distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this
 | 
			
		||||
 *    software must display the following acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 | 
			
		||||
 *    endorse or promote products derived from this software without
 | 
			
		||||
 *    prior written permission. For written permission, please contact
 | 
			
		||||
 *    licensing@OpenSSL.org.
 | 
			
		||||
 *
 | 
			
		||||
 * 5. Products derived from this software may not be called "OpenSSL"
 | 
			
		||||
 *    nor may "OpenSSL" appear in their names without prior written
 | 
			
		||||
 *    permission of the OpenSSL Project.
 | 
			
		||||
 *
 | 
			
		||||
 * 6. Redistributions of any form whatsoever must retain the following
 | 
			
		||||
 *    acknowledgment:
 | 
			
		||||
 *    "This product includes software developed by the OpenSSL Project
 | 
			
		||||
 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 | 
			
		||||
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
			
		||||
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 | 
			
		||||
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | 
			
		||||
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
			
		||||
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 | 
			
		||||
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
			
		||||
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 | 
			
		||||
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 * ====================================================================
 | 
			
		||||
 *
 | 
			
		||||
 * This product includes cryptographic software written by Eric Young
 | 
			
		||||
 * (eay@cryptsoft.com).  This product includes software written by Tim
 | 
			
		||||
 * Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "cryptlib.h"
 | 
			
		||||
#include <openssl/buffer.h>
 | 
			
		||||
 | 
			
		||||
char *BUF_strdup(const char *str)
 | 
			
		||||
	{
 | 
			
		||||
	if (str == NULL) return(NULL);
 | 
			
		||||
	return BUF_strndup(str, strlen(str));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
char *BUF_strndup(const char *str, size_t siz)
 | 
			
		||||
	{
 | 
			
		||||
	char *ret;
 | 
			
		||||
 | 
			
		||||
	if (str == NULL) return(NULL);
 | 
			
		||||
 | 
			
		||||
	ret=OPENSSL_malloc(siz+1);
 | 
			
		||||
	if (ret == NULL) 
 | 
			
		||||
		{
 | 
			
		||||
		BUFerr(BUF_F_BUF_STRNDUP,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return(NULL);
 | 
			
		||||
		}
 | 
			
		||||
	BUF_strlcpy(ret,str,siz+1);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void *BUF_memdup(const void *data, size_t siz)
 | 
			
		||||
	{
 | 
			
		||||
	void *ret;
 | 
			
		||||
 | 
			
		||||
	if (data == NULL) return(NULL);
 | 
			
		||||
 | 
			
		||||
	ret=OPENSSL_malloc(siz);
 | 
			
		||||
	if (ret == NULL) 
 | 
			
		||||
		{
 | 
			
		||||
		BUFerr(BUF_F_BUF_MEMDUP,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return(NULL);
 | 
			
		||||
		}
 | 
			
		||||
	return memcpy(ret, data, siz);
 | 
			
		||||
	}	
 | 
			
		||||
 | 
			
		||||
size_t BUF_strlcpy(char *dst, const char *src, size_t size)
 | 
			
		||||
	{
 | 
			
		||||
	size_t l = 0;
 | 
			
		||||
	for(; size > 1 && *src; size--)
 | 
			
		||||
		{
 | 
			
		||||
		*dst++ = *src++;
 | 
			
		||||
		l++;
 | 
			
		||||
		}
 | 
			
		||||
	if (size)
 | 
			
		||||
		*dst = '\0';
 | 
			
		||||
	return l + strlen(src);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
size_t BUF_strlcat(char *dst, const char *src, size_t size)
 | 
			
		||||
	{
 | 
			
		||||
	size_t l = 0;
 | 
			
		||||
	for(; size > 0 && *dst; size--, dst++)
 | 
			
		||||
		l++;
 | 
			
		||||
	return l + BUF_strlcpy(dst, src, size);
 | 
			
		||||
	}
 | 
			
		||||
@@ -161,61 +161,3 @@ int BUF_MEM_grow_clean(BUF_MEM *str, int len)
 | 
			
		||||
		}
 | 
			
		||||
	return(len);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
char *BUF_strdup(const char *str)
 | 
			
		||||
	{
 | 
			
		||||
	if (str == NULL) return(NULL);
 | 
			
		||||
	return BUF_strndup(str, strlen(str));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
char *BUF_strndup(const char *str, size_t siz)
 | 
			
		||||
	{
 | 
			
		||||
	char *ret;
 | 
			
		||||
 | 
			
		||||
	if (str == NULL) return(NULL);
 | 
			
		||||
 | 
			
		||||
	ret=OPENSSL_malloc(siz+1);
 | 
			
		||||
	if (ret == NULL) 
 | 
			
		||||
		{
 | 
			
		||||
		BUFerr(BUF_F_BUF_STRNDUP,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return(NULL);
 | 
			
		||||
		}
 | 
			
		||||
	BUF_strlcpy(ret,str,siz+1);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void *BUF_memdup(const void *data, size_t siz)
 | 
			
		||||
	{
 | 
			
		||||
	void *ret;
 | 
			
		||||
 | 
			
		||||
	if (data == NULL) return(NULL);
 | 
			
		||||
 | 
			
		||||
	ret=OPENSSL_malloc(siz);
 | 
			
		||||
	if (ret == NULL) 
 | 
			
		||||
		{
 | 
			
		||||
		BUFerr(BUF_F_BUF_MEMDUP,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return(NULL);
 | 
			
		||||
		}
 | 
			
		||||
	return memcpy(ret, data, siz);
 | 
			
		||||
	}	
 | 
			
		||||
 | 
			
		||||
size_t BUF_strlcpy(char *dst, const char *src, size_t size)
 | 
			
		||||
	{
 | 
			
		||||
	size_t l = 0;
 | 
			
		||||
	for(; size > 1 && *src; size--)
 | 
			
		||||
		{
 | 
			
		||||
		*dst++ = *src++;
 | 
			
		||||
		l++;
 | 
			
		||||
		}
 | 
			
		||||
	if (size)
 | 
			
		||||
		*dst = '\0';
 | 
			
		||||
	return l + strlen(src);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
size_t BUF_strlcat(char *dst, const char *src, size_t size)
 | 
			
		||||
	{
 | 
			
		||||
	size_t l = 0;
 | 
			
		||||
	for(; size > 0 && *dst; size--, dst++)
 | 
			
		||||
		l++;
 | 
			
		||||
	return l + BUF_strlcpy(dst, src, size);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ top:
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ top:
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
@@ -102,5 +102,8 @@ c_ofb64.o: ../../e_os.h ../../include/openssl/cast.h
 | 
			
		||||
c_ofb64.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
 | 
			
		||||
c_ofb64.o: c_ofb64.c cast_lcl.h
 | 
			
		||||
c_skey.o: ../../e_os.h ../../include/openssl/cast.h
 | 
			
		||||
c_skey.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
 | 
			
		||||
c_skey.o: c_skey.c cast_lcl.h cast_s.h
 | 
			
		||||
c_skey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
 | 
			
		||||
c_skey.o: ../../include/openssl/fips.h ../../include/openssl/opensslconf.h
 | 
			
		||||
c_skey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
c_skey.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
c_skey.o: ../../include/openssl/symhacks.h c_skey.c cast_lcl.h cast_s.h
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,8 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <openssl/cast.h>
 | 
			
		||||
#include <openssl/crypto.h>
 | 
			
		||||
#include <openssl/fips.h>
 | 
			
		||||
#include "cast_lcl.h"
 | 
			
		||||
#include "cast_s.h"
 | 
			
		||||
 | 
			
		||||
@@ -72,7 +74,7 @@
 | 
			
		||||
#define S6 CAST_S_table6
 | 
			
		||||
#define S7 CAST_S_table7
 | 
			
		||||
 | 
			
		||||
void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data)
 | 
			
		||||
FIPS_NON_FIPS_VCIPHER_Init(CAST)
 | 
			
		||||
	{
 | 
			
		||||
	CAST_LONG x[16];
 | 
			
		||||
	CAST_LONG z[16];
 | 
			
		||||
 
 | 
			
		||||
@@ -83,7 +83,9 @@ typedef struct cast_key_st
 | 
			
		||||
	int short_key;	/* Use reduced rounds for short key */
 | 
			
		||||
	} CAST_KEY;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
#ifdef OPENSSL_FIPS 
 | 
			
		||||
void private_CAST_set_key(CAST_KEY *key, int len, const unsigned char *data);
 | 
			
		||||
#endif
 | 
			
		||||
void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data);
 | 
			
		||||
void CAST_ecb_encrypt(const unsigned char *in,unsigned char *out,CAST_KEY *key,
 | 
			
		||||
		      int enc);
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ top:
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ top:
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
@@ -114,8 +114,8 @@ conf_mall.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
 | 
			
		||||
conf_mall.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
conf_mall.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
 | 
			
		||||
conf_mall.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
conf_mall.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
conf_mall.o: ../../include/openssl/objects.h
 | 
			
		||||
conf_mall.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
conf_mall.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
conf_mall.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
conf_mall.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
conf_mall.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
@@ -128,9 +128,9 @@ conf_mod.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/evp.h ../../include/openssl/fips.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
conf_mod.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
@@ -143,8 +143,9 @@ conf_sap.o: ../../include/openssl/dso.h ../../include/openssl/e_os2.h
 | 
			
		||||
conf_sap.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
 | 
			
		||||
conf_sap.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
 | 
			
		||||
conf_sap.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
conf_sap.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
conf_sap.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
conf_sap.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
conf_sap.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
conf_sap.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
conf_sap.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
conf_sap.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
 | 
			
		||||
conf_sap.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
 
 | 
			
		||||
@@ -114,6 +114,7 @@ typedef void conf_finish_func(CONF_IMODULE *md);
 | 
			
		||||
#define CONF_MFLAGS_SILENT		0x4
 | 
			
		||||
#define CONF_MFLAGS_NO_DSO		0x8
 | 
			
		||||
#define CONF_MFLAGS_IGNORE_MISSING_FILE	0x10
 | 
			
		||||
#define CONF_MFLAGS_DEFAULT_SECTION	0x20
 | 
			
		||||
 | 
			
		||||
int CONF_set_default_method(CONF_METHOD *meth);
 | 
			
		||||
void CONF_set_nconf(CONF *conf,LHASH *hash);
 | 
			
		||||
 
 | 
			
		||||
@@ -63,6 +63,7 @@
 | 
			
		||||
#include <openssl/dso.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
#include <openssl/asn1.h>
 | 
			
		||||
#include <openssl/evp.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
#endif
 | 
			
		||||
@@ -76,5 +77,6 @@ void OPENSSL_load_builtin_modules(void)
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	ENGINE_add_conf_module();
 | 
			
		||||
#endif
 | 
			
		||||
	EVP_add_alg_module();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -126,17 +126,18 @@ int CONF_modules_load(const CONF *cnf, const char *appname,
 | 
			
		||||
	{
 | 
			
		||||
	STACK_OF(CONF_VALUE) *values;
 | 
			
		||||
	CONF_VALUE *vl;
 | 
			
		||||
	char *vsection;
 | 
			
		||||
	char *vsection = NULL;
 | 
			
		||||
 | 
			
		||||
	int ret, i;
 | 
			
		||||
 | 
			
		||||
	if (!cnf)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	if (appname == NULL)
 | 
			
		||||
		appname = "openssl_conf";
 | 
			
		||||
	if (appname)
 | 
			
		||||
		vsection = NCONF_get_string(cnf, NULL, appname);
 | 
			
		||||
 | 
			
		||||
	vsection = NCONF_get_string(cnf, NULL, appname); 
 | 
			
		||||
	if (!appname || (!vsection && (flags & CONF_MFLAGS_DEFAULT_SECTION)))
 | 
			
		||||
		vsection = NCONF_get_string(cnf, NULL, "openssl_conf");
 | 
			
		||||
 | 
			
		||||
	if (!vsection)
 | 
			
		||||
		{
 | 
			
		||||
 
 | 
			
		||||
@@ -88,8 +88,8 @@ void OPENSSL_config(const char *config_name)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	ERR_clear_error();
 | 
			
		||||
	if (CONF_modules_load_file(NULL, NULL,
 | 
			
		||||
					CONF_MFLAGS_IGNORE_MISSING_FILE) <= 0)
 | 
			
		||||
	if (CONF_modules_load_file(NULL, config_name,
 | 
			
		||||
	CONF_MFLAGS_DEFAULT_SECTION|CONF_MFLAGS_IGNORE_MISSING_FILE) <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		BIO *bio_err;
 | 
			
		||||
		ERR_load_crypto_strings();
 | 
			
		||||
 
 | 
			
		||||
@@ -121,275 +121,17 @@
 | 
			
		||||
static double SSLeay_MSVC5_hack=0.0; /* and for VC1.5 */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
DECLARE_STACK_OF(CRYPTO_dynlock)
 | 
			
		||||
IMPLEMENT_STACK_OF(CRYPTO_dynlock)
 | 
			
		||||
 | 
			
		||||
/* real #defines in crypto.h, keep these upto date */
 | 
			
		||||
static const char* const lock_names[CRYPTO_NUM_LOCKS] =
 | 
			
		||||
	{
 | 
			
		||||
	"<<ERROR>>",
 | 
			
		||||
	"err",
 | 
			
		||||
	"ex_data",
 | 
			
		||||
	"x509",
 | 
			
		||||
	"x509_info",
 | 
			
		||||
	"x509_pkey",
 | 
			
		||||
	"x509_crl",
 | 
			
		||||
	"x509_req",
 | 
			
		||||
	"dsa",
 | 
			
		||||
	"rsa",
 | 
			
		||||
	"evp_pkey",
 | 
			
		||||
	"x509_store",
 | 
			
		||||
	"ssl_ctx",
 | 
			
		||||
	"ssl_cert",
 | 
			
		||||
	"ssl_session",
 | 
			
		||||
	"ssl_sess_cert",
 | 
			
		||||
	"ssl",
 | 
			
		||||
	"ssl_method",
 | 
			
		||||
	"rand",
 | 
			
		||||
	"rand2",
 | 
			
		||||
	"debug_malloc",
 | 
			
		||||
	"BIO",
 | 
			
		||||
	"gethostbyname",
 | 
			
		||||
	"getservbyname",
 | 
			
		||||
	"readdir",
 | 
			
		||||
	"RSA_blinding",
 | 
			
		||||
	"dh",
 | 
			
		||||
	"debug_malloc2",
 | 
			
		||||
	"dso",
 | 
			
		||||
	"dynlock",
 | 
			
		||||
	"engine",
 | 
			
		||||
	"ui",
 | 
			
		||||
	"ecdsa",
 | 
			
		||||
	"ec",
 | 
			
		||||
	"ecdh",
 | 
			
		||||
	"bn",
 | 
			
		||||
	"ec_pre_comp",
 | 
			
		||||
	"store",
 | 
			
		||||
	"comp",
 | 
			
		||||
#if CRYPTO_NUM_LOCKS != 39
 | 
			
		||||
# error "Inconsistency between crypto.h and cryptlib.c"
 | 
			
		||||
#endif
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
/* This is for applications to allocate new type names in the non-dynamic
 | 
			
		||||
   array of lock names.  These are numbered with positive numbers.  */
 | 
			
		||||
static STACK *app_locks=NULL;
 | 
			
		||||
 | 
			
		||||
/* For applications that want a more dynamic way of handling threads, the
 | 
			
		||||
   following stack is used.  These are externally numbered with negative
 | 
			
		||||
   numbers.  */
 | 
			
		||||
static STACK_OF(CRYPTO_dynlock) *dyn_locks=NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void (MS_FAR *locking_callback)(int mode,int type,
 | 
			
		||||
	const char *file,int line)=NULL;
 | 
			
		||||
static int (MS_FAR *add_lock_callback)(int *pointer,int amount,
 | 
			
		||||
	int type,const char *file,int line)=NULL;
 | 
			
		||||
static unsigned long (MS_FAR *id_callback)(void)=NULL;
 | 
			
		||||
static struct CRYPTO_dynlock_value *(MS_FAR *dynlock_create_callback)
 | 
			
		||||
	(const char *file,int line)=NULL;
 | 
			
		||||
static void (MS_FAR *dynlock_lock_callback)(int mode,
 | 
			
		||||
	struct CRYPTO_dynlock_value *l, const char *file,int line)=NULL;
 | 
			
		||||
static void (MS_FAR *dynlock_destroy_callback)(struct CRYPTO_dynlock_value *l,
 | 
			
		||||
	const char *file,int line)=NULL;
 | 
			
		||||
 | 
			
		||||
int CRYPTO_get_new_lockid(char *name)
 | 
			
		||||
	{
 | 
			
		||||
	char *str;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16)
 | 
			
		||||
	/* A hack to make Visual C++ 5.0 work correctly when linking as
 | 
			
		||||
	 * a DLL using /MT. Without this, the application cannot use
 | 
			
		||||
	 * and floating point printf's.
 | 
			
		||||
	 * It also seems to be needed for Visual C 1.5 (win16) */
 | 
			
		||||
	SSLeay_MSVC5_hack=(double)name[0]*(double)name[1];
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if ((app_locks == NULL) && ((app_locks=sk_new_null()) == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return(0);
 | 
			
		||||
		}
 | 
			
		||||
	if ((str=BUF_strdup(name)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_LOCKID,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return(0);
 | 
			
		||||
		}
 | 
			
		||||
	i=sk_push(app_locks,str);
 | 
			
		||||
	if (!i)
 | 
			
		||||
		OPENSSL_free(str);
 | 
			
		||||
	else
 | 
			
		||||
		i+=CRYPTO_NUM_LOCKS; /* gap of one :-) */
 | 
			
		||||
	return(i);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int CRYPTO_num_locks(void)
 | 
			
		||||
	{
 | 
			
		||||
	return CRYPTO_NUM_LOCKS;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int CRYPTO_get_new_dynlockid(void)
 | 
			
		||||
	{
 | 
			
		||||
	int i = 0;
 | 
			
		||||
	CRYPTO_dynlock *pointer = NULL;
 | 
			
		||||
 | 
			
		||||
	if (dynlock_create_callback == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,CRYPTO_R_NO_DYNLOCK_CREATE_CALLBACK);
 | 
			
		||||
		return(0);
 | 
			
		||||
		}
 | 
			
		||||
	CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
 | 
			
		||||
	if ((dyn_locks == NULL)
 | 
			
		||||
		&& ((dyn_locks=sk_CRYPTO_dynlock_new_null()) == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
 | 
			
		||||
		CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return(0);
 | 
			
		||||
		}
 | 
			
		||||
	CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
 | 
			
		||||
 | 
			
		||||
	pointer = (CRYPTO_dynlock *)OPENSSL_malloc(sizeof(CRYPTO_dynlock));
 | 
			
		||||
	if (pointer == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return(0);
 | 
			
		||||
		}
 | 
			
		||||
	pointer->references = 1;
 | 
			
		||||
	pointer->data = dynlock_create_callback(__FILE__,__LINE__);
 | 
			
		||||
	if (pointer->data == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		OPENSSL_free(pointer);
 | 
			
		||||
		CRYPTOerr(CRYPTO_F_CRYPTO_GET_NEW_DYNLOCKID,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return(0);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
 | 
			
		||||
	/* First, try to find an existing empty slot */
 | 
			
		||||
	i=sk_CRYPTO_dynlock_find(dyn_locks,NULL);
 | 
			
		||||
	/* If there was none, push, thereby creating a new one */
 | 
			
		||||
	if (i == -1)
 | 
			
		||||
		/* Since sk_push() returns the number of items on the
 | 
			
		||||
		   stack, not the location of the pushed item, we need
 | 
			
		||||
		   to transform the returned number into a position,
 | 
			
		||||
		   by decreasing it.  */
 | 
			
		||||
		i=sk_CRYPTO_dynlock_push(dyn_locks,pointer) - 1;
 | 
			
		||||
	else
 | 
			
		||||
		/* If we found a place with a NULL pointer, put our pointer
 | 
			
		||||
		   in it.  */
 | 
			
		||||
		sk_CRYPTO_dynlock_set(dyn_locks,i,pointer);
 | 
			
		||||
	CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
 | 
			
		||||
 | 
			
		||||
	if (i == -1)
 | 
			
		||||
		{
 | 
			
		||||
		dynlock_destroy_callback(pointer->data,__FILE__,__LINE__);
 | 
			
		||||
		OPENSSL_free(pointer);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		i += 1; /* to avoid 0 */
 | 
			
		||||
	return -i;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void CRYPTO_destroy_dynlockid(int i)
 | 
			
		||||
	{
 | 
			
		||||
	CRYPTO_dynlock *pointer = NULL;
 | 
			
		||||
	if (i)
 | 
			
		||||
		i = -i-1;
 | 
			
		||||
	if (dynlock_destroy_callback == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
 | 
			
		||||
 | 
			
		||||
	if (dyn_locks == NULL || i >= sk_CRYPTO_dynlock_num(dyn_locks))
 | 
			
		||||
		{
 | 
			
		||||
		CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
 | 
			
		||||
		return;
 | 
			
		||||
		}
 | 
			
		||||
	pointer = sk_CRYPTO_dynlock_value(dyn_locks, i);
 | 
			
		||||
	if (pointer != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		--pointer->references;
 | 
			
		||||
#ifdef REF_CHECK
 | 
			
		||||
		if (pointer->references < 0)
 | 
			
		||||
			{
 | 
			
		||||
			fprintf(stderr,"CRYPTO_destroy_dynlockid, bad reference count\n");
 | 
			
		||||
			abort();
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
#endif
 | 
			
		||||
			if (pointer->references <= 0)
 | 
			
		||||
				{
 | 
			
		||||
				sk_CRYPTO_dynlock_set(dyn_locks, i, NULL);
 | 
			
		||||
				}
 | 
			
		||||
			else
 | 
			
		||||
				pointer = NULL;
 | 
			
		||||
		}
 | 
			
		||||
	CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
 | 
			
		||||
 | 
			
		||||
	if (pointer)
 | 
			
		||||
		{
 | 
			
		||||
		dynlock_destroy_callback(pointer->data,__FILE__,__LINE__);
 | 
			
		||||
		OPENSSL_free(pointer);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i)
 | 
			
		||||
	{
 | 
			
		||||
	CRYPTO_dynlock *pointer = NULL;
 | 
			
		||||
	if (i)
 | 
			
		||||
		i = -i-1;
 | 
			
		||||
 | 
			
		||||
	CRYPTO_w_lock(CRYPTO_LOCK_DYNLOCK);
 | 
			
		||||
 | 
			
		||||
	if (dyn_locks != NULL && i < sk_CRYPTO_dynlock_num(dyn_locks))
 | 
			
		||||
		pointer = sk_CRYPTO_dynlock_value(dyn_locks, i);
 | 
			
		||||
	if (pointer)
 | 
			
		||||
		pointer->references++;
 | 
			
		||||
 | 
			
		||||
	CRYPTO_w_unlock(CRYPTO_LOCK_DYNLOCK);
 | 
			
		||||
 | 
			
		||||
	if (pointer)
 | 
			
		||||
		return pointer->data;
 | 
			
		||||
	return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
struct CRYPTO_dynlock_value *(*CRYPTO_get_dynlock_create_callback(void))
 | 
			
		||||
	(const char *file,int line)
 | 
			
		||||
	{
 | 
			
		||||
	return(dynlock_create_callback);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void (*CRYPTO_get_dynlock_lock_callback(void))(int mode,
 | 
			
		||||
	struct CRYPTO_dynlock_value *l, const char *file,int line)
 | 
			
		||||
	{
 | 
			
		||||
	return(dynlock_lock_callback);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void (*CRYPTO_get_dynlock_destroy_callback(void))
 | 
			
		||||
	(struct CRYPTO_dynlock_value *l, const char *file,int line)
 | 
			
		||||
	{
 | 
			
		||||
	return(dynlock_destroy_callback);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void CRYPTO_set_dynlock_create_callback(struct CRYPTO_dynlock_value *(*func)
 | 
			
		||||
	(const char *file, int line))
 | 
			
		||||
	{
 | 
			
		||||
	dynlock_create_callback=func;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void CRYPTO_set_dynlock_lock_callback(void (*func)(int mode,
 | 
			
		||||
	struct CRYPTO_dynlock_value *l, const char *file, int line))
 | 
			
		||||
	{
 | 
			
		||||
	dynlock_lock_callback=func;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void CRYPTO_set_dynlock_destroy_callback(void (*func)
 | 
			
		||||
	(struct CRYPTO_dynlock_value *l, const char *file, int line))
 | 
			
		||||
	{
 | 
			
		||||
	dynlock_destroy_callback=func;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void (*CRYPTO_get_locking_callback(void))(int mode,int type,const char *file,
 | 
			
		||||
		int line)
 | 
			
		||||
	{
 | 
			
		||||
@@ -445,6 +187,14 @@ unsigned long CRYPTO_thread_id(void)
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void (*do_dynlock_cb)(int mode, int type, const char *file, int line);
 | 
			
		||||
 | 
			
		||||
void int_CRYPTO_set_do_dynlock_callback(
 | 
			
		||||
	void (*dyn_cb)(int mode, int type, const char *file, int line))
 | 
			
		||||
	{
 | 
			
		||||
	do_dynlock_cb = dyn_cb;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void CRYPTO_lock(int mode, int type, const char *file, int line)
 | 
			
		||||
	{
 | 
			
		||||
#ifdef LOCK_DEBUG
 | 
			
		||||
@@ -472,17 +222,8 @@ void CRYPTO_lock(int mode, int type, const char *file, int line)
 | 
			
		||||
#endif
 | 
			
		||||
	if (type < 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (dynlock_lock_callback != NULL)
 | 
			
		||||
			{
 | 
			
		||||
			struct CRYPTO_dynlock_value *pointer
 | 
			
		||||
				= CRYPTO_get_dynlock_value(type);
 | 
			
		||||
 | 
			
		||||
			OPENSSL_assert(pointer != NULL);
 | 
			
		||||
 | 
			
		||||
			dynlock_lock_callback(mode, pointer, file, line);
 | 
			
		||||
 | 
			
		||||
			CRYPTO_destroy_dynlockid(type);
 | 
			
		||||
			}
 | 
			
		||||
		if (do_dynlock_cb)
 | 
			
		||||
			do_dynlock_cb(mode, type, file, line);
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		if (locking_callback != NULL)
 | 
			
		||||
@@ -527,21 +268,9 @@ int CRYPTO_add_lock(int *pointer, int amount, int type, const char *file,
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
const char *CRYPTO_get_lock_name(int type)
 | 
			
		||||
	{
 | 
			
		||||
	if (type < 0)
 | 
			
		||||
		return("dynamic");
 | 
			
		||||
	else if (type < CRYPTO_NUM_LOCKS)
 | 
			
		||||
		return(lock_names[type]);
 | 
			
		||||
	else if (type-CRYPTO_NUM_LOCKS > sk_num(app_locks))
 | 
			
		||||
		return("ERROR");
 | 
			
		||||
	else
 | 
			
		||||
		return(sk_value(app_locks,type-CRYPTO_NUM_LOCKS));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#if	defined(__i386)   || defined(__i386__)   || defined(_M_IX86) || \
 | 
			
		||||
	defined(__INTEL__) || \
 | 
			
		||||
	defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64)
 | 
			
		||||
	defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64)
 | 
			
		||||
 | 
			
		||||
unsigned long  OPENSSL_ia32cap_P=0;
 | 
			
		||||
unsigned long *OPENSSL_ia32cap_loc(void) { return &OPENSSL_ia32cap_P; }
 | 
			
		||||
@@ -577,6 +306,62 @@ void OPENSSL_cpuid_setup(void) {}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if (defined(_WIN32) || defined(__CYGWIN__)) && defined(_WINDLL)
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
 | 
			
		||||
#include <tlhelp32.h>
 | 
			
		||||
#if defined(__GNUC__) && __GNUC__>=2
 | 
			
		||||
static int DllInit(void) __attribute__((constructor));
 | 
			
		||||
#elif defined(_MSC_VER)
 | 
			
		||||
static int DllInit(void);
 | 
			
		||||
# ifdef _WIN64
 | 
			
		||||
# pragma section(".CRT$XCU",read)
 | 
			
		||||
  __declspec(allocate(".CRT$XCU"))
 | 
			
		||||
# else
 | 
			
		||||
# pragma data_seg(".CRT$XCU")
 | 
			
		||||
# endif
 | 
			
		||||
  static int (*p)(void) = DllInit;
 | 
			
		||||
# pragma data_seg()
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int DllInit(void)
 | 
			
		||||
{
 | 
			
		||||
#if defined(_WIN32_WINNT)
 | 
			
		||||
	union	{ int(*f)(void); BYTE *p; } t = { DllInit };
 | 
			
		||||
        HANDLE	hModuleSnap = INVALID_HANDLE_VALUE;
 | 
			
		||||
	IMAGE_DOS_HEADER *dos_header;
 | 
			
		||||
	IMAGE_NT_HEADERS *nt_headers;
 | 
			
		||||
	MODULEENTRY32 me32 = {sizeof(me32)};
 | 
			
		||||
 | 
			
		||||
	hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,0);
 | 
			
		||||
	if (hModuleSnap != INVALID_HANDLE_VALUE &&
 | 
			
		||||
	    Module32First(hModuleSnap,&me32)) do
 | 
			
		||||
		{
 | 
			
		||||
		if (t.p >= me32.modBaseAddr &&
 | 
			
		||||
		    t.p <  me32.modBaseAddr+me32.modBaseSize)
 | 
			
		||||
			{
 | 
			
		||||
			dos_header=(IMAGE_DOS_HEADER *)me32.modBaseAddr;
 | 
			
		||||
			if (dos_header->e_magic==IMAGE_DOS_SIGNATURE)
 | 
			
		||||
				{
 | 
			
		||||
				nt_headers=(IMAGE_NT_HEADERS *)
 | 
			
		||||
					((BYTE *)dos_header+dos_header->e_lfanew);
 | 
			
		||||
				if (nt_headers->Signature==IMAGE_NT_SIGNATURE &&
 | 
			
		||||
				    me32.modBaseAddr!=(BYTE*)nt_headers->OptionalHeader.ImageBase)
 | 
			
		||||
					OPENSSL_NONPIC_relocated=1;
 | 
			
		||||
				}
 | 
			
		||||
			break;
 | 
			
		||||
			}
 | 
			
		||||
		} while (Module32Next(hModuleSnap,&me32));
 | 
			
		||||
 | 
			
		||||
	if (hModuleSnap != INVALID_HANDLE_VALUE)
 | 
			
		||||
		CloseHandle(hModuleSnap);
 | 
			
		||||
#endif
 | 
			
		||||
	OPENSSL_cpuid_setup();
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#ifdef __CYGWIN__
 | 
			
		||||
/* pick DLL_[PROCESS|THREAD]_[ATTACH|DETACH] definitions */
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
@@ -620,6 +405,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason,
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(_WIN32) && !defined(__CYGWIN__)
 | 
			
		||||
#include <tchar.h>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -78,7 +78,7 @@ $!
 | 
			
		||||
$ ENCRYPT_TYPES = "Basic,"+ -
 | 
			
		||||
		  "OBJECTS,"+ -
 | 
			
		||||
		  "MD2,MD4,MD5,SHA,MDC2,HMAC,RIPEMD,"+ -
 | 
			
		||||
		  "DES,RC2,RC4,RC5,IDEA,BF,CAST,CAMELLIA,"+ -
 | 
			
		||||
		  "DES,RC2,RC4,RC5,IDEA,BF,CAST,CAMELLIA,SEED,"+ -
 | 
			
		||||
		  "BN,EC,RSA,DSA,ECDSA,DH,ECDH,DSO,ENGINE,AES,"+ -
 | 
			
		||||
		  "BUFFER,BIO,STACK,LHASH,RAND,ERR,"+ -
 | 
			
		||||
		  "EVP,EVP_2,ASN1,ASN1_2,PEM,X509,X509V3,"+ -
 | 
			
		||||
@@ -184,6 +184,7 @@ $ LIB_BF = "bf_skey,bf_ecb,bf_enc,bf_cfb64,bf_ofb64"
 | 
			
		||||
$ LIB_CAST = "c_skey,c_ecb,c_enc,c_cfb64,c_ofb64"
 | 
			
		||||
$ LIB_CAMELLIA = "camellia,cmll_misc,cmll_ecb,cmll_cbc,cmll_ofb,"+ -
 | 
			
		||||
	"cmll_cfb,cmll_ctr"
 | 
			
		||||
$ LIB_SEED = "seed,seed_cbc,seed_ecb,seed_cfb,seed_ofb"
 | 
			
		||||
$ LIB_BN_ASM = "[.asm]vms.mar,vms-helper"
 | 
			
		||||
$ IF F$TRNLNM("OPENSSL_NO_ASM").OR.ARCH.EQS."AXP" THEN LIB_BN_ASM = "bn_asm"
 | 
			
		||||
$ LIB_BN = "bn_add,bn_div,bn_exp,bn_lib,bn_ctx,bn_mul,bn_mod,"+ -
 | 
			
		||||
@@ -226,7 +227,7 @@ $ LIB_RAND = "md_rand,randfile,rand_lib,rand_err,rand_egd,"+ -
 | 
			
		||||
$ LIB_ERR = "err,err_all,err_prn"
 | 
			
		||||
$ LIB_OBJECTS = "o_names,obj_dat,obj_lib,obj_err"
 | 
			
		||||
$ LIB_EVP = "encode,digest,evp_enc,evp_key,evp_acnf,"+ -
 | 
			
		||||
	"e_des,e_bf,e_idea,e_des3,e_camellia,"+ -
 | 
			
		||||
	"e_des,e_bf,e_idea,e_des3,e_camellia,e_seed,"+ -
 | 
			
		||||
	"e_rc4,e_aes,names,"+ -
 | 
			
		||||
	"e_xcbc_d,e_rc2,e_cast,e_rc5"
 | 
			
		||||
$ LIB_EVP_2 = "m_null,m_md2,m_md4,m_md5,m_sha,m_sha1," + -
 | 
			
		||||
 
 | 
			
		||||
@@ -219,7 +219,9 @@ typedef struct openssl_item_st
 | 
			
		||||
#define CRYPTO_LOCK_EC_PRE_COMP		36
 | 
			
		||||
#define CRYPTO_LOCK_STORE		37
 | 
			
		||||
#define CRYPTO_LOCK_COMP		38
 | 
			
		||||
#define CRYPTO_NUM_LOCKS		39
 | 
			
		||||
#define CRYPTO_LOCK_FIPS		39
 | 
			
		||||
#define CRYPTO_LOCK_FIPS2		40
 | 
			
		||||
#define CRYPTO_NUM_LOCKS		41
 | 
			
		||||
 | 
			
		||||
#define CRYPTO_LOCK		1
 | 
			
		||||
#define CRYPTO_UNLOCK		2
 | 
			
		||||
@@ -341,14 +343,7 @@ DECLARE_STACK_OF(CRYPTO_EX_DATA_FUNCS)
 | 
			
		||||
 | 
			
		||||
/* Set standard debugging functions (not done by default
 | 
			
		||||
 * unless CRYPTO_MDEBUG is defined) */
 | 
			
		||||
#define CRYPTO_malloc_debug_init()	do {\
 | 
			
		||||
	CRYPTO_set_mem_debug_functions(\
 | 
			
		||||
		CRYPTO_dbg_malloc,\
 | 
			
		||||
		CRYPTO_dbg_realloc,\
 | 
			
		||||
		CRYPTO_dbg_free,\
 | 
			
		||||
		CRYPTO_dbg_set_options,\
 | 
			
		||||
		CRYPTO_dbg_get_options);\
 | 
			
		||||
	} while(0)
 | 
			
		||||
void CRYPTO_malloc_debug_init(void);
 | 
			
		||||
 | 
			
		||||
int CRYPTO_mem_ctrl(int mode);
 | 
			
		||||
int CRYPTO_is_mem_check_on(void);
 | 
			
		||||
@@ -427,6 +422,9 @@ const char *CRYPTO_get_lock_name(int type);
 | 
			
		||||
int CRYPTO_add_lock(int *pointer,int amount,int type, const char *file,
 | 
			
		||||
		    int line);
 | 
			
		||||
 | 
			
		||||
void int_CRYPTO_set_do_dynlock_callback(
 | 
			
		||||
	void (*do_dynlock_cb)(int mode, int type, const char *file, int line));
 | 
			
		||||
 | 
			
		||||
int CRYPTO_get_new_dynlockid(void);
 | 
			
		||||
void CRYPTO_destroy_dynlockid(int i);
 | 
			
		||||
struct CRYPTO_dynlock_value *CRYPTO_get_dynlock_value(int i);
 | 
			
		||||
@@ -451,6 +449,10 @@ int CRYPTO_set_mem_debug_functions(void (*m)(void *,int,const char *,int,int),
 | 
			
		||||
				   void (*f)(void *,int),
 | 
			
		||||
				   void (*so)(long),
 | 
			
		||||
				   long (*go)(void));
 | 
			
		||||
void CRYPTO_set_mem_info_functions(
 | 
			
		||||
	int  (*push_info_fn)(const char *info, const char *file, int line),
 | 
			
		||||
	int  (*pop_info_fn)(void),
 | 
			
		||||
	int (*remove_all_info_fn)(void));
 | 
			
		||||
void CRYPTO_get_mem_functions(void *(**m)(size_t),void *(**r)(void *, size_t), void (**f)(void *));
 | 
			
		||||
void CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *));
 | 
			
		||||
void CRYPTO_get_mem_ex_functions(void *(**m)(size_t,const char *,int),
 | 
			
		||||
@@ -506,6 +508,9 @@ void CRYPTO_dbg_free(void *addr,int before_p);
 | 
			
		||||
void CRYPTO_dbg_set_options(long bits);
 | 
			
		||||
long CRYPTO_dbg_get_options(void);
 | 
			
		||||
 | 
			
		||||
int CRYPTO_dbg_push_info(const char *info, const char *file, int line);
 | 
			
		||||
int CRYPTO_dbg_pop_info(void);
 | 
			
		||||
int CRYPTO_dbg_remove_all_info(void);
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_FP_API
 | 
			
		||||
void CRYPTO_mem_leaks_fp(FILE *);
 | 
			
		||||
@@ -522,12 +527,69 @@ void OpenSSLDie(const char *file,int line,const char *assertion);
 | 
			
		||||
unsigned long *OPENSSL_ia32cap_loc(void);
 | 
			
		||||
#define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc()))
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
#define FIPS_ERROR_IGNORED(alg) OpenSSLDie(__FILE__, __LINE__, \
 | 
			
		||||
		alg " previous FIPS forbidden algorithm error ignored");
 | 
			
		||||
 | 
			
		||||
#define FIPS_BAD_ABORT(alg) OpenSSLDie(__FILE__, __LINE__, \
 | 
			
		||||
		#alg " Algorithm forbidden in FIPS mode");
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS_STRICT
 | 
			
		||||
#define FIPS_BAD_ALGORITHM(alg) FIPS_BAD_ABORT(alg)
 | 
			
		||||
#else
 | 
			
		||||
#define FIPS_BAD_ALGORITHM(alg) \
 | 
			
		||||
	{ \
 | 
			
		||||
	FIPSerr(FIPS_F_HASH_FINAL,FIPS_R_NON_FIPS_METHOD); \
 | 
			
		||||
	ERR_add_error_data(2, "Algorithm=", #alg); \
 | 
			
		||||
	return 0; \
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Low level digest API blocking macro */
 | 
			
		||||
 | 
			
		||||
#define FIPS_NON_FIPS_MD_Init(alg) \
 | 
			
		||||
	int alg##_Init(alg##_CTX *c) \
 | 
			
		||||
		{ \
 | 
			
		||||
		if (FIPS_mode()) \
 | 
			
		||||
			FIPS_BAD_ALGORITHM(alg) \
 | 
			
		||||
		return private_##alg##_Init(c); \
 | 
			
		||||
		} \
 | 
			
		||||
	int private_##alg##_Init(alg##_CTX *c)
 | 
			
		||||
 | 
			
		||||
/* For ciphers the API often varies from cipher to cipher and each needs to
 | 
			
		||||
 * be treated as a special case. Variable key length ciphers (Blowfish, RC4,
 | 
			
		||||
 * CAST) however are very similar and can use a blocking macro.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define FIPS_NON_FIPS_VCIPHER_Init(alg) \
 | 
			
		||||
	void alg##_set_key(alg##_KEY *key, int len, const unsigned char *data) \
 | 
			
		||||
		{ \
 | 
			
		||||
		if (FIPS_mode()) \
 | 
			
		||||
			FIPS_BAD_ABORT(alg) \
 | 
			
		||||
		private_##alg##_set_key(key, len, data); \
 | 
			
		||||
		} \
 | 
			
		||||
	void private_##alg##_set_key(alg##_KEY *key, int len, \
 | 
			
		||||
					const unsigned char *data)
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#define FIPS_NON_FIPS_VCIPHER_Init(alg) \
 | 
			
		||||
	void alg##_set_key(alg##_KEY *key, int len, const unsigned char *data)
 | 
			
		||||
 | 
			
		||||
#define FIPS_NON_FIPS_MD_Init(alg) \
 | 
			
		||||
	int alg##_Init(alg##_CTX *c) 
 | 
			
		||||
 | 
			
		||||
#endif /* def OPENSSL_FIPS */
 | 
			
		||||
 | 
			
		||||
/* BEGIN ERROR CODES */
 | 
			
		||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
 | 
			
		||||
 * made after this point may be overwritten when the script is next run.
 | 
			
		||||
 */
 | 
			
		||||
void ERR_load_CRYPTO_strings(void);
 | 
			
		||||
 | 
			
		||||
#define OPENSSL_HAVE_INIT	1
 | 
			
		||||
void OPENSSL_init(void);
 | 
			
		||||
 | 
			
		||||
/* Error codes for the CRYPTO functions. */
 | 
			
		||||
 | 
			
		||||
/* Function codes. */
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ TEST=destest.c
 | 
			
		||||
APPS=
 | 
			
		||||
 | 
			
		||||
LIB=$(TOP)/libcrypto.a
 | 
			
		||||
LIBSRC=	cbc_cksm.c cbc_enc.c  cfb64enc.c cfb_enc.c  \
 | 
			
		||||
LIBSRC=	des_lib.c cbc_cksm.c cbc_enc.c  cfb64enc.c cfb_enc.c  \
 | 
			
		||||
	ecb3_enc.c ecb_enc.c  enc_read.c enc_writ.c \
 | 
			
		||||
	fcrypt.c ofb64enc.c ofb_enc.c  pcbc_enc.c \
 | 
			
		||||
	qud_cksm.c rand_key.c rpc_enc.c  set_key.c  \
 | 
			
		||||
@@ -33,7 +33,7 @@ LIBSRC=	cbc_cksm.c cbc_enc.c  cfb64enc.c cfb_enc.c  \
 | 
			
		||||
	str2key.c  cfb64ede.c ofb64ede.c ede_cbcm_enc.c des_old.c des_old2.c \
 | 
			
		||||
	read2pwd.c
 | 
			
		||||
 | 
			
		||||
LIBOBJ= set_key.o  ecb_enc.o  cbc_enc.o \
 | 
			
		||||
LIBOBJ= des_lib.o set_key.o  ecb_enc.o  cbc_enc.o \
 | 
			
		||||
	ecb3_enc.o cfb64enc.o cfb64ede.o cfb_enc.o  ofb64ede.o \
 | 
			
		||||
	enc_read.o enc_writ.o ofb64enc.o \
 | 
			
		||||
	ofb_enc.o  str2key.o  pcbc_enc.o qud_cksm.o rand_key.o \
 | 
			
		||||
@@ -54,7 +54,7 @@ top:
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
@@ -157,6 +157,13 @@ des_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
 | 
			
		||||
des_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
des_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
 | 
			
		||||
des_enc.o: des_enc.c des_locl.h ncbc_enc.c
 | 
			
		||||
des_lib.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
 | 
			
		||||
des_lib.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
 | 
			
		||||
des_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
 | 
			
		||||
des_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
des_lib.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
des_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
 | 
			
		||||
des_lib.o: ../../include/openssl/ui_compat.h des_lib.c des_locl.h des_ver.h
 | 
			
		||||
des_old.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
 | 
			
		||||
des_old.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
 | 
			
		||||
des_old.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
 | 
			
		||||
@@ -175,14 +182,12 @@ ecb3_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
 | 
			
		||||
ecb3_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
ecb3_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
 | 
			
		||||
ecb3_enc.o: des_locl.h ecb3_enc.c
 | 
			
		||||
ecb_enc.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/ui_compat.h des_locl.h des_ver.h ecb_enc.c
 | 
			
		||||
ecb_enc.o: spr.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
 | 
			
		||||
ecb_enc.o: des_locl.h ecb_enc.c spr.h
 | 
			
		||||
ede_cbcm_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
 | 
			
		||||
ede_cbcm_enc.o: ../../include/openssl/e_os2.h
 | 
			
		||||
ede_cbcm_enc.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
 
 | 
			
		||||
@@ -289,6 +289,8 @@ void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1,
 | 
			
		||||
 | 
			
		||||
#ifndef DES_DEFAULT_OPTIONS
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_FIPS_DES_ASM)
 | 
			
		||||
 | 
			
		||||
#undef CBC_ENC_C__DONT_UPDATE_IV
 | 
			
		||||
#include "ncbc_enc.c" /* DES_ncbc_encrypt */
 | 
			
		||||
 | 
			
		||||
@@ -404,4 +406,6 @@ void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
 | 
			
		||||
	tin[0]=tin[1]=0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /* DES_DEFAULT_OPTIONS */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										106
									
								
								crypto/des/des_lib.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								crypto/des/des_lib.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
			
		||||
/* crypto/des/ecb_enc.c */
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *    "This product includes cryptographic software written by
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "des_locl.h"
 | 
			
		||||
#include "des_ver.h"
 | 
			
		||||
#include <openssl/opensslv.h>
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
 | 
			
		||||
OPENSSL_GLOBAL const char libdes_version[]="libdes" OPENSSL_VERSION_PTEXT;
 | 
			
		||||
OPENSSL_GLOBAL const char DES_version[]="DES" OPENSSL_VERSION_PTEXT;
 | 
			
		||||
 | 
			
		||||
const char *DES_options(void)
 | 
			
		||||
	{
 | 
			
		||||
	static int init=1;
 | 
			
		||||
	static char buf[32];
 | 
			
		||||
 | 
			
		||||
	if (init)
 | 
			
		||||
		{
 | 
			
		||||
		const char *ptr,*unroll,*risc,*size;
 | 
			
		||||
 | 
			
		||||
#ifdef DES_PTR
 | 
			
		||||
		ptr="ptr";
 | 
			
		||||
#else
 | 
			
		||||
		ptr="idx";
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(DES_RISC1) || defined(DES_RISC2)
 | 
			
		||||
#ifdef DES_RISC1
 | 
			
		||||
		risc="risc1";
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef DES_RISC2
 | 
			
		||||
		risc="risc2";
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
		risc="cisc";
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef DES_UNROLL
 | 
			
		||||
		unroll="16";
 | 
			
		||||
#else
 | 
			
		||||
		unroll="4";
 | 
			
		||||
#endif
 | 
			
		||||
		if (sizeof(DES_LONG) != sizeof(long))
 | 
			
		||||
			size="int";
 | 
			
		||||
		else
 | 
			
		||||
			size="long";
 | 
			
		||||
		BIO_snprintf(buf,sizeof buf,"des(%s,%s,%s,%s)",ptr,risc,unroll,
 | 
			
		||||
			     size);
 | 
			
		||||
		init=0;
 | 
			
		||||
		}
 | 
			
		||||
	return(buf);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -57,54 +57,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "des_locl.h"
 | 
			
		||||
#include "des_ver.h"
 | 
			
		||||
#include "spr.h"
 | 
			
		||||
#include <openssl/opensslv.h>
 | 
			
		||||
#include <openssl/bio.h>
 | 
			
		||||
 | 
			
		||||
OPENSSL_GLOBAL const char libdes_version[]="libdes" OPENSSL_VERSION_PTEXT;
 | 
			
		||||
OPENSSL_GLOBAL const char DES_version[]="DES" OPENSSL_VERSION_PTEXT;
 | 
			
		||||
 | 
			
		||||
const char *DES_options(void)
 | 
			
		||||
	{
 | 
			
		||||
	static int init=1;
 | 
			
		||||
	static char buf[32];
 | 
			
		||||
 | 
			
		||||
	if (init)
 | 
			
		||||
		{
 | 
			
		||||
		const char *ptr,*unroll,*risc,*size;
 | 
			
		||||
 | 
			
		||||
#ifdef DES_PTR
 | 
			
		||||
		ptr="ptr";
 | 
			
		||||
#else
 | 
			
		||||
		ptr="idx";
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(DES_RISC1) || defined(DES_RISC2)
 | 
			
		||||
#ifdef DES_RISC1
 | 
			
		||||
		risc="risc1";
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef DES_RISC2
 | 
			
		||||
		risc="risc2";
 | 
			
		||||
#endif
 | 
			
		||||
#else
 | 
			
		||||
		risc="cisc";
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef DES_UNROLL
 | 
			
		||||
		unroll="16";
 | 
			
		||||
#else
 | 
			
		||||
		unroll="4";
 | 
			
		||||
#endif
 | 
			
		||||
		if (sizeof(DES_LONG) != sizeof(long))
 | 
			
		||||
			size="int";
 | 
			
		||||
		else
 | 
			
		||||
			size="long";
 | 
			
		||||
		BIO_snprintf(buf,sizeof buf,"des(%s,%s,%s,%s)",ptr,risc,unroll,
 | 
			
		||||
			     size);
 | 
			
		||||
		init=0;
 | 
			
		||||
		}
 | 
			
		||||
	return(buf);
 | 
			
		||||
	}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output,
 | 
			
		||||
		     DES_key_schedule *ks, int enc)
 | 
			
		||||
 
 | 
			
		||||
@@ -63,6 +63,7 @@
 | 
			
		||||
 * 1.1 added norm_expand_bits
 | 
			
		||||
 * 1.0 First working version
 | 
			
		||||
 */
 | 
			
		||||
#include <openssl/fips.h>
 | 
			
		||||
#include "des_locl.h"
 | 
			
		||||
 | 
			
		||||
OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key);	/* defaults to false */
 | 
			
		||||
@@ -115,7 +116,7 @@ int DES_check_key_parity(const_DES_cblock *key)
 | 
			
		||||
 * (and actual cblock values).
 | 
			
		||||
 */
 | 
			
		||||
#define NUM_WEAK_KEY	16
 | 
			
		||||
static DES_cblock weak_keys[NUM_WEAK_KEY]={
 | 
			
		||||
static const DES_cblock weak_keys[NUM_WEAK_KEY]={
 | 
			
		||||
	/* weak keys */
 | 
			
		||||
	{0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01},
 | 
			
		||||
	{0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE},
 | 
			
		||||
@@ -349,6 +350,10 @@ void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule)
 | 
			
		||||
	k = &schedule->ks->deslong[0];
 | 
			
		||||
	in = &(*key)[0];
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
	FIPS_selftest_check();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	c2l(in,c);
 | 
			
		||||
	c2l(in,d);
 | 
			
		||||
 | 
			
		||||
@@ -405,3 +410,4 @@ void des_fixup_key_parity(des_cblock *key)
 | 
			
		||||
	des_set_odd_parity(key);
 | 
			
		||||
	}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ top:
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -77,6 +77,8 @@
 | 
			
		||||
# define OPENSSL_DH_MAX_MODULUS_BITS	10000
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024
 | 
			
		||||
 | 
			
		||||
#define DH_FLAG_CACHE_MONT_P     0x01
 | 
			
		||||
#define DH_FLAG_NO_EXP_CONSTTIME 0x02 /* new with 0.9.7h; the built-in DH
 | 
			
		||||
                                       * implementation now uses constant time
 | 
			
		||||
@@ -167,6 +169,11 @@ struct dh_st
 | 
			
		||||
 | 
			
		||||
const DH_METHOD *DH_OpenSSL(void);
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
DH *	FIPS_dh_new(void);
 | 
			
		||||
void	FIPS_dh_free(DH *dh);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void DH_set_default_method(const DH_METHOD *meth);
 | 
			
		||||
const DH_METHOD *DH_get_default_method(void);
 | 
			
		||||
int DH_set_method(DH *dh, const DH_METHOD *meth);
 | 
			
		||||
@@ -218,6 +225,9 @@ void ERR_load_DH_strings(void);
 | 
			
		||||
#define DH_F_DHPARAMS_PRINT				 100
 | 
			
		||||
#define DH_F_DHPARAMS_PRINT_FP				 101
 | 
			
		||||
#define DH_F_DH_BUILTIN_GENPARAMS			 106
 | 
			
		||||
#define DH_F_DH_COMPUTE_KEY				 107
 | 
			
		||||
#define DH_F_DH_GENERATE_KEY				 108
 | 
			
		||||
#define DH_F_DH_GENERATE_PARAMETERS			 109
 | 
			
		||||
#define DH_F_DH_NEW_METHOD				 105
 | 
			
		||||
#define DH_F_GENERATE_KEY				 103
 | 
			
		||||
#define DH_F_GENERATE_PARAMETERS			 104
 | 
			
		||||
@@ -225,6 +235,7 @@ void ERR_load_DH_strings(void);
 | 
			
		||||
/* Reason codes. */
 | 
			
		||||
#define DH_R_BAD_GENERATOR				 101
 | 
			
		||||
#define DH_R_INVALID_PUBKEY				 102
 | 
			
		||||
#define DH_R_KEY_SIZE_TOO_SMALL				 104
 | 
			
		||||
#define DH_R_MODULUS_TOO_LARGE				 103
 | 
			
		||||
#define DH_R_NO_PRIVATE_VALUE				 100
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -70,6 +70,8 @@
 | 
			
		||||
 * should hold.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_FIPS
 | 
			
		||||
 | 
			
		||||
int DH_check(const DH *dh, int *ret)
 | 
			
		||||
	{
 | 
			
		||||
	int ok=0;
 | 
			
		||||
@@ -140,3 +142,5 @@ err:
 | 
			
		||||
	if (q != NULL) BN_free(q);
 | 
			
		||||
	return(ok);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										247
									
								
								crypto/dh/dh_eng.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										247
									
								
								crypto/dh/dh_eng.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,247 @@
 | 
			
		||||
/* crypto/dh/dh_lib.c */
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *    "This product includes cryptographic software written by
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "cryptlib.h"
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const char DH_version[]="Diffie-Hellman" OPENSSL_VERSION_PTEXT;
 | 
			
		||||
 | 
			
		||||
static const DH_METHOD *default_DH_method = NULL;
 | 
			
		||||
 | 
			
		||||
void DH_set_default_method(const DH_METHOD *meth)
 | 
			
		||||
	{
 | 
			
		||||
	default_DH_method = meth;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
const DH_METHOD *DH_get_default_method(void)
 | 
			
		||||
	{
 | 
			
		||||
	if(!default_DH_method)
 | 
			
		||||
		default_DH_method = DH_OpenSSL();
 | 
			
		||||
	return default_DH_method;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int DH_set_method(DH *dh, const DH_METHOD *meth)
 | 
			
		||||
	{
 | 
			
		||||
	/* NB: The caller is specifically setting a method, so it's not up to us
 | 
			
		||||
	 * to deal with which ENGINE it comes from. */
 | 
			
		||||
        const DH_METHOD *mtmp;
 | 
			
		||||
        mtmp = dh->meth;
 | 
			
		||||
        if (mtmp->finish) mtmp->finish(dh);
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	if (dh->engine)
 | 
			
		||||
		{
 | 
			
		||||
		ENGINE_finish(dh->engine);
 | 
			
		||||
		dh->engine = NULL;
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
        dh->meth = meth;
 | 
			
		||||
        if (meth->init) meth->init(dh);
 | 
			
		||||
        return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
DH *DH_new(void)
 | 
			
		||||
	{
 | 
			
		||||
	return DH_new_method(NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
DH *DH_new_method(ENGINE *engine)
 | 
			
		||||
	{
 | 
			
		||||
	DH *ret;
 | 
			
		||||
 | 
			
		||||
	ret=(DH *)OPENSSL_malloc(sizeof(DH));
 | 
			
		||||
	if (ret == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		DHerr(DH_F_DH_NEW_METHOD,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return(NULL);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ret->meth = DH_get_default_method();
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	if (engine)
 | 
			
		||||
		{
 | 
			
		||||
		if (!ENGINE_init(engine))
 | 
			
		||||
			{
 | 
			
		||||
			DHerr(DH_F_DH_NEW_METHOD, ERR_R_ENGINE_LIB);
 | 
			
		||||
			OPENSSL_free(ret);
 | 
			
		||||
			return NULL;
 | 
			
		||||
			}
 | 
			
		||||
		ret->engine = engine;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ret->engine = ENGINE_get_default_DH();
 | 
			
		||||
	if(ret->engine)
 | 
			
		||||
		{
 | 
			
		||||
		ret->meth = ENGINE_get_DH(ret->engine);
 | 
			
		||||
		if(!ret->meth)
 | 
			
		||||
			{
 | 
			
		||||
			DHerr(DH_F_DH_NEW_METHOD,ERR_R_ENGINE_LIB);
 | 
			
		||||
			ENGINE_finish(ret->engine);
 | 
			
		||||
			OPENSSL_free(ret);
 | 
			
		||||
			return NULL;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	ret->pad=0;
 | 
			
		||||
	ret->version=0;
 | 
			
		||||
	ret->p=NULL;
 | 
			
		||||
	ret->g=NULL;
 | 
			
		||||
	ret->length=0;
 | 
			
		||||
	ret->pub_key=NULL;
 | 
			
		||||
	ret->priv_key=NULL;
 | 
			
		||||
	ret->q=NULL;
 | 
			
		||||
	ret->j=NULL;
 | 
			
		||||
	ret->seed = NULL;
 | 
			
		||||
	ret->seedlen = 0;
 | 
			
		||||
	ret->counter = NULL;
 | 
			
		||||
	ret->method_mont_p=NULL;
 | 
			
		||||
	ret->references = 1;
 | 
			
		||||
	ret->flags=ret->meth->flags;
 | 
			
		||||
	CRYPTO_new_ex_data(CRYPTO_EX_INDEX_DH, ret, &ret->ex_data);
 | 
			
		||||
	if ((ret->meth->init != NULL) && !ret->meth->init(ret))
 | 
			
		||||
		{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		if (ret->engine)
 | 
			
		||||
			ENGINE_finish(ret->engine);
 | 
			
		||||
#endif
 | 
			
		||||
		CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DH, ret, &ret->ex_data);
 | 
			
		||||
		OPENSSL_free(ret);
 | 
			
		||||
		ret=NULL;
 | 
			
		||||
		}
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void DH_free(DH *r)
 | 
			
		||||
	{
 | 
			
		||||
	int i;
 | 
			
		||||
	if(r == NULL) return;
 | 
			
		||||
	i = CRYPTO_add(&r->references, -1, CRYPTO_LOCK_DH);
 | 
			
		||||
#ifdef REF_PRINT
 | 
			
		||||
	REF_PRINT("DH",r);
 | 
			
		||||
#endif
 | 
			
		||||
	if (i > 0) return;
 | 
			
		||||
#ifdef REF_CHECK
 | 
			
		||||
	if (i < 0)
 | 
			
		||||
		{
 | 
			
		||||
		fprintf(stderr,"DH_free, bad reference count\n");
 | 
			
		||||
		abort();
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (r->meth->finish)
 | 
			
		||||
		r->meth->finish(r);
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	if (r->engine)
 | 
			
		||||
		ENGINE_finish(r->engine);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DH, r, &r->ex_data);
 | 
			
		||||
 | 
			
		||||
	if (r->p != NULL) BN_clear_free(r->p);
 | 
			
		||||
	if (r->g != NULL) BN_clear_free(r->g);
 | 
			
		||||
	if (r->q != NULL) BN_clear_free(r->q);
 | 
			
		||||
	if (r->j != NULL) BN_clear_free(r->j);
 | 
			
		||||
	if (r->seed) OPENSSL_free(r->seed);
 | 
			
		||||
	if (r->counter != NULL) BN_clear_free(r->counter);
 | 
			
		||||
	if (r->pub_key != NULL) BN_clear_free(r->pub_key);
 | 
			
		||||
	if (r->priv_key != NULL) BN_clear_free(r->priv_key);
 | 
			
		||||
	OPENSSL_free(r);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int DH_up_ref(DH *r)
 | 
			
		||||
	{
 | 
			
		||||
	int i = CRYPTO_add(&r->references, 1, CRYPTO_LOCK_DH);
 | 
			
		||||
#ifdef REF_PRINT
 | 
			
		||||
	REF_PRINT("DH",r);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef REF_CHECK
 | 
			
		||||
	if (i < 2)
 | 
			
		||||
		{
 | 
			
		||||
		fprintf(stderr, "DH_up, bad reference count\n");
 | 
			
		||||
		abort();
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	return ((i > 1) ? 1 : 0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
 | 
			
		||||
	     CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
 | 
			
		||||
        {
 | 
			
		||||
	return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, argl, argp,
 | 
			
		||||
				new_func, dup_func, free_func);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
int DH_set_ex_data(DH *d, int idx, void *arg)
 | 
			
		||||
	{
 | 
			
		||||
	return(CRYPTO_set_ex_data(&d->ex_data,idx,arg));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void *DH_get_ex_data(DH *d, int idx)
 | 
			
		||||
	{
 | 
			
		||||
	return(CRYPTO_get_ex_data(&d->ex_data,idx));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int DH_size(const DH *dh)
 | 
			
		||||
	{
 | 
			
		||||
	return(BN_num_bytes(dh->p));
 | 
			
		||||
	}
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/* crypto/dh/dh_err.c */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999-2005 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1999-2007 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
 | 
			
		||||
@@ -74,6 +74,9 @@ static ERR_STRING_DATA DH_str_functs[]=
 | 
			
		||||
{ERR_FUNC(DH_F_DHPARAMS_PRINT),	"DHparams_print"},
 | 
			
		||||
{ERR_FUNC(DH_F_DHPARAMS_PRINT_FP),	"DHparams_print_fp"},
 | 
			
		||||
{ERR_FUNC(DH_F_DH_BUILTIN_GENPARAMS),	"DH_BUILTIN_GENPARAMS"},
 | 
			
		||||
{ERR_FUNC(DH_F_DH_COMPUTE_KEY),	"DH_compute_key"},
 | 
			
		||||
{ERR_FUNC(DH_F_DH_GENERATE_KEY),	"DH_generate_key"},
 | 
			
		||||
{ERR_FUNC(DH_F_DH_GENERATE_PARAMETERS),	"DH_generate_parameters"},
 | 
			
		||||
{ERR_FUNC(DH_F_DH_NEW_METHOD),	"DH_new_method"},
 | 
			
		||||
{ERR_FUNC(DH_F_GENERATE_KEY),	"GENERATE_KEY"},
 | 
			
		||||
{ERR_FUNC(DH_F_GENERATE_PARAMETERS),	"GENERATE_PARAMETERS"},
 | 
			
		||||
@@ -84,6 +87,7 @@ static ERR_STRING_DATA DH_str_reasons[]=
 | 
			
		||||
	{
 | 
			
		||||
{ERR_REASON(DH_R_BAD_GENERATOR)          ,"bad generator"},
 | 
			
		||||
{ERR_REASON(DH_R_INVALID_PUBKEY)         ,"invalid public key"},
 | 
			
		||||
{ERR_REASON(DH_R_KEY_SIZE_TOO_SMALL)     ,"key size too small"},
 | 
			
		||||
{ERR_REASON(DH_R_MODULUS_TOO_LARGE)      ,"modulus too large"},
 | 
			
		||||
{ERR_REASON(DH_R_NO_PRIVATE_VALUE)       ,"no private value"},
 | 
			
		||||
{0,NULL}
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,8 @@
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_FIPS
 | 
			
		||||
 | 
			
		||||
static int dh_builtin_genparams(DH *ret, int prime_len, int generator, BN_GENCB *cb);
 | 
			
		||||
 | 
			
		||||
int DH_generate_parameters_ex(DH *ret, int prime_len, int generator, BN_GENCB *cb)
 | 
			
		||||
@@ -173,3 +175,5 @@ err:
 | 
			
		||||
		}
 | 
			
		||||
	return ok;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -62,6 +62,8 @@
 | 
			
		||||
#include <openssl/rand.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_FIPS
 | 
			
		||||
 | 
			
		||||
static int generate_key(DH *dh);
 | 
			
		||||
static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh);
 | 
			
		||||
static int dh_bn_mod_exp(const DH *dh, BIGNUM *r,
 | 
			
		||||
@@ -150,7 +152,7 @@ static int generate_key(DH *dh)
 | 
			
		||||
			{
 | 
			
		||||
			BN_init(&local_prk);
 | 
			
		||||
			prk = &local_prk;
 | 
			
		||||
			BN_with_flags(prk, priv_key, BN_FLG_EXP_CONSTTIME);
 | 
			
		||||
			BN_with_flags(prk, priv_key, BN_FLG_CONSTTIME);
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			prk = priv_key;
 | 
			
		||||
@@ -203,7 +205,7 @@ static int compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh)
 | 
			
		||||
		if ((dh->flags & DH_FLAG_NO_EXP_CONSTTIME) == 0)
 | 
			
		||||
			{
 | 
			
		||||
			/* XXX */
 | 
			
		||||
			BN_set_flags(dh->priv_key, BN_FLG_EXP_CONSTTIME);
 | 
			
		||||
			BN_set_flags(dh->priv_key, BN_FLG_CONSTTIME);
 | 
			
		||||
			}
 | 
			
		||||
		if (!mont)
 | 
			
		||||
			goto err;
 | 
			
		||||
@@ -261,3 +263,5 @@ static int dh_finish(DH *dh)
 | 
			
		||||
		BN_MONT_CTX_free(dh->method_mont_p);
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										247
									
								
								crypto/dh/dh_utl.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										247
									
								
								crypto/dh/dh_utl.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,247 @@
 | 
			
		||||
/* crypto/dh/dh_lib.c */
 | 
			
		||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * This package is an SSL implementation written
 | 
			
		||||
 * by Eric Young (eay@cryptsoft.com).
 | 
			
		||||
 * The implementation was written so as to conform with Netscapes SSL.
 | 
			
		||||
 * 
 | 
			
		||||
 * This library is free for commercial and non-commercial use as long as
 | 
			
		||||
 * the following conditions are aheared to.  The following conditions
 | 
			
		||||
 * apply to all code found in this distribution, be it the RC4, RSA,
 | 
			
		||||
 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
 | 
			
		||||
 * included with this distribution is covered by the same copyright terms
 | 
			
		||||
 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright remains Eric Young's, and as such any Copyright notices in
 | 
			
		||||
 * the code are not to be removed.
 | 
			
		||||
 * If this package is used in a product, Eric Young should be given attribution
 | 
			
		||||
 * as the author of the parts of the library used.
 | 
			
		||||
 * This can be in the form of a textual message at program startup or
 | 
			
		||||
 * in documentation (online or textual) provided with the package.
 | 
			
		||||
 * 
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. All advertising materials mentioning features or use of this software
 | 
			
		||||
 *    must display the following acknowledgement:
 | 
			
		||||
 *    "This product includes cryptographic software written by
 | 
			
		||||
 *     Eric Young (eay@cryptsoft.com)"
 | 
			
		||||
 *    The word 'cryptographic' can be left out if the rouines from the library
 | 
			
		||||
 *    being used are not cryptographic related :-).
 | 
			
		||||
 * 4. If you include any Windows specific code (or a derivative thereof) from 
 | 
			
		||||
 *    the apps directory (application code) you must include an acknowledgement:
 | 
			
		||||
 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
 | 
			
		||||
 * 
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 * 
 | 
			
		||||
 * The licence and distribution terms for any publically available version or
 | 
			
		||||
 * derivative of this code cannot be changed.  i.e. this code cannot simply be
 | 
			
		||||
 * copied and put under another distribution licence
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "cryptlib.h"
 | 
			
		||||
#include <openssl/bn.h>
 | 
			
		||||
#include <openssl/dh.h>
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
#include <openssl/engine.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const char DH_version[]="Diffie-Hellman" OPENSSL_VERSION_PTEXT;
 | 
			
		||||
 | 
			
		||||
static const DH_METHOD *default_DH_method = NULL;
 | 
			
		||||
 | 
			
		||||
void DH_set_default_method(const DH_METHOD *meth)
 | 
			
		||||
	{
 | 
			
		||||
	default_DH_method = meth;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
const DH_METHOD *DH_get_default_method(void)
 | 
			
		||||
	{
 | 
			
		||||
	if(!default_DH_method)
 | 
			
		||||
		default_DH_method = DH_OpenSSL();
 | 
			
		||||
	return default_DH_method;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int DH_set_method(DH *dh, const DH_METHOD *meth)
 | 
			
		||||
	{
 | 
			
		||||
	/* NB: The caller is specifically setting a method, so it's not up to us
 | 
			
		||||
	 * to deal with which ENGINE it comes from. */
 | 
			
		||||
        const DH_METHOD *mtmp;
 | 
			
		||||
        mtmp = dh->meth;
 | 
			
		||||
        if (mtmp->finish) mtmp->finish(dh);
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	if (dh->engine)
 | 
			
		||||
		{
 | 
			
		||||
		ENGINE_finish(dh->engine);
 | 
			
		||||
		dh->engine = NULL;
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
        dh->meth = meth;
 | 
			
		||||
        if (meth->init) meth->init(dh);
 | 
			
		||||
        return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
DH *DH_new(void)
 | 
			
		||||
	{
 | 
			
		||||
	return DH_new_method(NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
DH *DH_new_method(ENGINE *engine)
 | 
			
		||||
	{
 | 
			
		||||
	DH *ret;
 | 
			
		||||
 | 
			
		||||
	ret=(DH *)OPENSSL_malloc(sizeof(DH));
 | 
			
		||||
	if (ret == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		DHerr(DH_F_DH_NEW_METHOD,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return(NULL);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	ret->meth = DH_get_default_method();
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	if (engine)
 | 
			
		||||
		{
 | 
			
		||||
		if (!ENGINE_init(engine))
 | 
			
		||||
			{
 | 
			
		||||
			DHerr(DH_F_DH_NEW_METHOD, ERR_R_ENGINE_LIB);
 | 
			
		||||
			OPENSSL_free(ret);
 | 
			
		||||
			return NULL;
 | 
			
		||||
			}
 | 
			
		||||
		ret->engine = engine;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		ret->engine = ENGINE_get_default_DH();
 | 
			
		||||
	if(ret->engine)
 | 
			
		||||
		{
 | 
			
		||||
		ret->meth = ENGINE_get_DH(ret->engine);
 | 
			
		||||
		if(!ret->meth)
 | 
			
		||||
			{
 | 
			
		||||
			DHerr(DH_F_DH_NEW_METHOD,ERR_R_ENGINE_LIB);
 | 
			
		||||
			ENGINE_finish(ret->engine);
 | 
			
		||||
			OPENSSL_free(ret);
 | 
			
		||||
			return NULL;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	ret->pad=0;
 | 
			
		||||
	ret->version=0;
 | 
			
		||||
	ret->p=NULL;
 | 
			
		||||
	ret->g=NULL;
 | 
			
		||||
	ret->length=0;
 | 
			
		||||
	ret->pub_key=NULL;
 | 
			
		||||
	ret->priv_key=NULL;
 | 
			
		||||
	ret->q=NULL;
 | 
			
		||||
	ret->j=NULL;
 | 
			
		||||
	ret->seed = NULL;
 | 
			
		||||
	ret->seedlen = 0;
 | 
			
		||||
	ret->counter = NULL;
 | 
			
		||||
	ret->method_mont_p=NULL;
 | 
			
		||||
	ret->references = 1;
 | 
			
		||||
	ret->flags=ret->meth->flags;
 | 
			
		||||
	CRYPTO_new_ex_data(CRYPTO_EX_INDEX_DH, ret, &ret->ex_data);
 | 
			
		||||
	if ((ret->meth->init != NULL) && !ret->meth->init(ret))
 | 
			
		||||
		{
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
		if (ret->engine)
 | 
			
		||||
			ENGINE_finish(ret->engine);
 | 
			
		||||
#endif
 | 
			
		||||
		CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DH, ret, &ret->ex_data);
 | 
			
		||||
		OPENSSL_free(ret);
 | 
			
		||||
		ret=NULL;
 | 
			
		||||
		}
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void DH_free(DH *r)
 | 
			
		||||
	{
 | 
			
		||||
	int i;
 | 
			
		||||
	if(r == NULL) return;
 | 
			
		||||
	i = CRYPTO_add(&r->references, -1, CRYPTO_LOCK_DH);
 | 
			
		||||
#ifdef REF_PRINT
 | 
			
		||||
	REF_PRINT("DH",r);
 | 
			
		||||
#endif
 | 
			
		||||
	if (i > 0) return;
 | 
			
		||||
#ifdef REF_CHECK
 | 
			
		||||
	if (i < 0)
 | 
			
		||||
		{
 | 
			
		||||
		fprintf(stderr,"DH_free, bad reference count\n");
 | 
			
		||||
		abort();
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (r->meth->finish)
 | 
			
		||||
		r->meth->finish(r);
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
	if (r->engine)
 | 
			
		||||
		ENGINE_finish(r->engine);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	CRYPTO_free_ex_data(CRYPTO_EX_INDEX_DH, r, &r->ex_data);
 | 
			
		||||
 | 
			
		||||
	if (r->p != NULL) BN_clear_free(r->p);
 | 
			
		||||
	if (r->g != NULL) BN_clear_free(r->g);
 | 
			
		||||
	if (r->q != NULL) BN_clear_free(r->q);
 | 
			
		||||
	if (r->j != NULL) BN_clear_free(r->j);
 | 
			
		||||
	if (r->seed) OPENSSL_free(r->seed);
 | 
			
		||||
	if (r->counter != NULL) BN_clear_free(r->counter);
 | 
			
		||||
	if (r->pub_key != NULL) BN_clear_free(r->pub_key);
 | 
			
		||||
	if (r->priv_key != NULL) BN_clear_free(r->priv_key);
 | 
			
		||||
	OPENSSL_free(r);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int DH_up_ref(DH *r)
 | 
			
		||||
	{
 | 
			
		||||
	int i = CRYPTO_add(&r->references, 1, CRYPTO_LOCK_DH);
 | 
			
		||||
#ifdef REF_PRINT
 | 
			
		||||
	REF_PRINT("DH",r);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef REF_CHECK
 | 
			
		||||
	if (i < 2)
 | 
			
		||||
		{
 | 
			
		||||
		fprintf(stderr, "DH_up, bad reference count\n");
 | 
			
		||||
		abort();
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
	return ((i > 1) ? 1 : 0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int DH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
 | 
			
		||||
	     CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func)
 | 
			
		||||
        {
 | 
			
		||||
	return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, argl, argp,
 | 
			
		||||
				new_func, dup_func, free_func);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
int DH_set_ex_data(DH *d, int idx, void *arg)
 | 
			
		||||
	{
 | 
			
		||||
	return(CRYPTO_set_ex_data(&d->ex_data,idx,arg));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void *DH_get_ex_data(DH *d, int idx)
 | 
			
		||||
	{
 | 
			
		||||
	return(CRYPTO_get_ex_data(&d->ex_data,idx));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int DH_size(const DH *dh)
 | 
			
		||||
	{
 | 
			
		||||
	return(BN_num_bytes(dh->p));
 | 
			
		||||
	}
 | 
			
		||||
@@ -18,9 +18,9 @@ APPS=
 | 
			
		||||
 | 
			
		||||
LIB=$(TOP)/libcrypto.a
 | 
			
		||||
LIBSRC= dsa_gen.c dsa_key.c dsa_lib.c dsa_asn1.c dsa_vrf.c dsa_sign.c \
 | 
			
		||||
	dsa_err.c dsa_ossl.c dsa_depr.c
 | 
			
		||||
	dsa_err.c dsa_ossl.c dsa_depr.c dsa_utl.c
 | 
			
		||||
LIBOBJ= dsa_gen.o dsa_key.o dsa_lib.o dsa_asn1.o dsa_vrf.o dsa_sign.o \
 | 
			
		||||
	dsa_err.o dsa_ossl.o dsa_depr.o
 | 
			
		||||
	dsa_err.o dsa_ossl.o dsa_depr.o dsa_utl.o
 | 
			
		||||
 | 
			
		||||
SRC= $(LIBSRC)
 | 
			
		||||
 | 
			
		||||
@@ -35,7 +35,7 @@ top:
 | 
			
		||||
all:	lib
 | 
			
		||||
 | 
			
		||||
lib:	$(LIBOBJ)
 | 
			
		||||
	$(AR) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(ARX) $(LIB) $(LIBOBJ)
 | 
			
		||||
	$(RANLIB) $(LIB) || echo Never mind.
 | 
			
		||||
	@touch lib
 | 
			
		||||
 | 
			
		||||
@@ -80,8 +80,8 @@ dsa_asn1.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
dsa_asn1.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
 | 
			
		||||
dsa_asn1.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
dsa_asn1.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
dsa_asn1.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
 | 
			
		||||
dsa_asn1.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
dsa_asn1.o: ../../include/openssl/err.h ../../include/openssl/fips.h
 | 
			
		||||
dsa_asn1.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
dsa_asn1.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
dsa_asn1.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
dsa_asn1.o: ../../include/openssl/symhacks.h ../cryptlib.h dsa_asn1.c
 | 
			
		||||
@@ -90,8 +90,9 @@ dsa_depr.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
dsa_depr.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
dsa_depr.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
dsa_depr.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
dsa_depr.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
dsa_depr.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
dsa_depr.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
dsa_depr.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
dsa_depr.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
dsa_depr.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
dsa_depr.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
 | 
			
		||||
dsa_depr.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
@@ -108,12 +109,13 @@ dsa_gen.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/err.h ../../include/openssl/evp.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/symhacks.h ../cryptlib.h dsa_gen.c
 | 
			
		||||
dsa_gen.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
 | 
			
		||||
dsa_gen.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
dsa_gen.o: ../cryptlib.h dsa_gen.c
 | 
			
		||||
dsa_key.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
dsa_key.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
dsa_key.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
@@ -146,19 +148,29 @@ dsa_sign.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
dsa_sign.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
dsa_sign.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
dsa_sign.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
 | 
			
		||||
dsa_sign.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
 | 
			
		||||
dsa_sign.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
dsa_sign.o: ../../include/openssl/err.h ../../include/openssl/fips.h
 | 
			
		||||
dsa_sign.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
dsa_sign.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
dsa_sign.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
 | 
			
		||||
dsa_sign.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
dsa_sign.o: ../cryptlib.h dsa_sign.c
 | 
			
		||||
dsa_utl.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
dsa_utl.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
dsa_utl.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
dsa_utl.o: ../../include/openssl/dh.h ../../include/openssl/dsa.h
 | 
			
		||||
dsa_utl.o: ../../include/openssl/e_os2.h ../../include/openssl/engine.h
 | 
			
		||||
dsa_utl.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
 | 
			
		||||
dsa_utl.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
dsa_utl.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
 | 
			
		||||
dsa_utl.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
dsa_utl.o: ../cryptlib.h dsa_utl.c
 | 
			
		||||
dsa_vrf.o: ../../e_os.h ../../include/openssl/asn1.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/rand.h ../../include/openssl/safestack.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
dsa_vrf.o: ../cryptlib.h dsa_vrf.c
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/fips.h ../../include/openssl/lhash.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
dsa_vrf.o: ../../include/openssl/symhacks.h ../cryptlib.h dsa_vrf.c
 | 
			
		||||
 
 | 
			
		||||
@@ -88,6 +88,8 @@
 | 
			
		||||
# define OPENSSL_DSA_MAX_MODULUS_BITS	10000
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024
 | 
			
		||||
 | 
			
		||||
#define DSA_FLAG_CACHE_MONT_P	0x01
 | 
			
		||||
#define DSA_FLAG_NO_EXP_CONSTTIME       0x02 /* new with 0.9.7h; the built-in DSA
 | 
			
		||||
                                              * implementation now uses constant time
 | 
			
		||||
@@ -97,6 +99,25 @@
 | 
			
		||||
                                              * be used for all exponents.
 | 
			
		||||
                                              */
 | 
			
		||||
 | 
			
		||||
/* If this flag is set the DSA method is FIPS compliant and can be used
 | 
			
		||||
 * in FIPS mode. This is set in the validated module method. If an
 | 
			
		||||
 * application sets this flag in its own methods it is its reposibility
 | 
			
		||||
 * to ensure the result is compliant.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define DSA_FLAG_FIPS_METHOD			0x0400
 | 
			
		||||
 | 
			
		||||
/* If this flag is set the operations normally disabled in FIPS mode are
 | 
			
		||||
 * permitted it is then the applications responsibility to ensure that the
 | 
			
		||||
 * usage is compliant.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define DSA_FLAG_NON_FIPS_ALLOW			0x0400
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
#define FIPS_DSA_SIZE_T	int
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
@@ -189,6 +210,11 @@ void	DSA_set_default_method(const DSA_METHOD *);
 | 
			
		||||
const DSA_METHOD *DSA_get_default_method(void);
 | 
			
		||||
int	DSA_set_method(DSA *dsa, const DSA_METHOD *);
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
DSA *	FIPS_dsa_new(void);
 | 
			
		||||
void	FIPS_dsa_free (DSA *r);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
DSA *	DSA_new(void);
 | 
			
		||||
DSA *	DSA_new_method(ENGINE *engine);
 | 
			
		||||
void	DSA_free (DSA *r);
 | 
			
		||||
@@ -249,6 +275,11 @@ int	DSA_print_fp(FILE *bp, const DSA *x, int off);
 | 
			
		||||
DH *DSA_dup_DH(const DSA *r);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OPENSSL_FIPS
 | 
			
		||||
int FIPS_dsa_sig_encode(unsigned char *out, DSA_SIG *sig);
 | 
			
		||||
int FIPS_dsa_sig_decode(DSA_SIG *sig, const unsigned char *in, int inlen);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* BEGIN ERROR CODES */
 | 
			
		||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
 | 
			
		||||
 * made after this point may be overwritten when the script is next run.
 | 
			
		||||
@@ -261,11 +292,16 @@ void ERR_load_DSA_strings(void);
 | 
			
		||||
#define DSA_F_D2I_DSA_SIG				 110
 | 
			
		||||
#define DSA_F_DSAPARAMS_PRINT				 100
 | 
			
		||||
#define DSA_F_DSAPARAMS_PRINT_FP			 101
 | 
			
		||||
#define DSA_F_DSA_BUILTIN_KEYGEN			 119
 | 
			
		||||
#define DSA_F_DSA_BUILTIN_PARAMGEN			 118
 | 
			
		||||
#define DSA_F_DSA_DO_SIGN				 112
 | 
			
		||||
#define DSA_F_DSA_DO_VERIFY				 113
 | 
			
		||||
#define DSA_F_DSA_GENERATE_PARAMETERS			 117
 | 
			
		||||
#define DSA_F_DSA_NEW_METHOD				 103
 | 
			
		||||
#define DSA_F_DSA_PRINT					 104
 | 
			
		||||
#define DSA_F_DSA_PRINT_FP				 105
 | 
			
		||||
#define DSA_F_DSA_SET_DEFAULT_METHOD			 115
 | 
			
		||||
#define DSA_F_DSA_SET_METHOD				 116
 | 
			
		||||
#define DSA_F_DSA_SIGN					 106
 | 
			
		||||
#define DSA_F_DSA_SIGN_SETUP				 107
 | 
			
		||||
#define DSA_F_DSA_SIG_NEW				 109
 | 
			
		||||
@@ -276,8 +312,11 @@ void ERR_load_DSA_strings(void);
 | 
			
		||||
/* Reason codes. */
 | 
			
		||||
#define DSA_R_BAD_Q_VALUE				 102
 | 
			
		||||
#define DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE		 100
 | 
			
		||||
#define DSA_R_KEY_SIZE_TOO_SMALL			 106
 | 
			
		||||
#define DSA_R_MISSING_PARAMETERS			 101
 | 
			
		||||
#define DSA_R_MODULUS_TOO_LARGE				 103
 | 
			
		||||
#define DSA_R_NON_FIPS_METHOD				 104
 | 
			
		||||
#define DSA_R_OPERATION_NOT_ALLOWED_IN_FIPS_MODE	 105
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user