Compare commits
	
		
			361 Commits
		
	
	
		
			OpenSSL_1_
			...
			OpenSSL_1_
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					55615e8d48 | ||
| 
						 | 
					56edb20184 | ||
| 
						 | 
					ac3dd9b7e6 | ||
| 
						 | 
					d8541d7e9e | ||
| 
						 | 
					b29ffa392e | ||
| 
						 | 
					005f4893dc | ||
| 
						 | 
					d585cc32a5 | ||
| 
						 | 
					fb35ea28f4 | ||
| 
						 | 
					41d049e1cd | ||
| 
						 | 
					98b94544e5 | ||
| 
						 | 
					844de56ed6 | ||
| 
						 | 
					784934498f | ||
| 
						 | 
					0b5f9ce37b | ||
| 
						 | 
					fc45da0535 | ||
| 
						 | 
					5844c9453f | ||
| 
						 | 
					88883f2ebf | ||
| 
						 | 
					638856f40c | ||
| 
						 | 
					a5184a6c89 | ||
| 
						 | 
					e71aab1c02 | ||
| 
						 | 
					b77390a2ff | ||
| 
						 | 
					78b9d13474 | ||
| 
						 | 
					e83009840a | ||
| 
						 | 
					84d0c40f3f | ||
| 
						 | 
					c8cc43108d | ||
| 
						 | 
					1fe1c65c3b | ||
| 
						 | 
					22ec08d7b7 | ||
| 
						 | 
					0f5fdb73d7 | ||
| 
						 | 
					9f82c7b3aa | ||
| 
						 | 
					200c8ed4f5 | ||
| 
						 | 
					a5524e534b | ||
| 
						 | 
					edd0f5c201 | ||
| 
						 | 
					020bc42893 | ||
| 
						 | 
					61587d65ea | ||
| 
						 | 
					71d5679cd3 | ||
| 
						 | 
					418c051161 | ||
| 
						 | 
					6a3dd58678 | ||
| 
						 | 
					2d404dc380 | ||
| 
						 | 
					b2593839da | ||
| 
						 | 
					bfc19297cd | ||
| 
						 | 
					978b5d709a | ||
| 
						 | 
					ec1f125512 | ||
| 
						 | 
					363c8fd572 | ||
| 
						 | 
					91dc4497de | ||
| 
						 | 
					11ca27c912 | ||
| 
						 | 
					a0ba92ccde | ||
| 
						 | 
					f141376ae2 | ||
| 
						 | 
					e4840c88c5 | ||
| 
						 | 
					67d4253174 | ||
| 
						 | 
					978c8aa8b7 | ||
| 
						 | 
					72ac982306 | ||
| 
						 | 
					b0c8e38e33 | ||
| 
						 | 
					64ec479559 | ||
| 
						 | 
					7794c355ea | ||
| 
						 | 
					dfa08ea750 | ||
| 
						 | 
					2bd918696b | ||
| 
						 | 
					456b9820eb | ||
| 
						 | 
					e56c77b8ee | ||
| 
						 | 
					6905187488 | ||
| 
						 | 
					9d1fcbebbc | ||
| 
						 | 
					21d8f24485 | ||
| 
						 | 
					f9394bd7a0 | ||
| 
						 | 
					b2a6718819 | ||
| 
						 | 
					34a0eade7f | ||
| 
						 | 
					2bc914eb29 | ||
| 
						 | 
					2ab1e7fde3 | ||
| 
						 | 
					628c15039f | ||
| 
						 | 
					a50a8a76dd | ||
| 
						 | 
					7ac2c47583 | ||
| 
						 | 
					76067c75fd | ||
| 
						 | 
					f95d1af064 | ||
| 
						 | 
					83fcd322f7 | ||
| 
						 | 
					12650153ec | ||
| 
						 | 
					8f42c34f8f | ||
| 
						 | 
					421baf1862 | ||
| 
						 | 
					8b5ac90e5e | ||
| 
						 | 
					4cb23e12a3 | ||
| 
						 | 
					dd642deea8 | ||
| 
						 | 
					927f7a8703 | ||
| 
						 | 
					525e13612e | ||
| 
						 | 
					5999b897ff | ||
| 
						 | 
					bae16c98c1 | ||
| 
						 | 
					9d4798a9e0 | ||
| 
						 | 
					246a010b78 | ||
| 
						 | 
					1915a22184 | ||
| 
						 | 
					a6ce498b2a | ||
| 
						 | 
					d46e946d26 | ||
| 
						 | 
					c88f65f5b5 | ||
| 
						 | 
					fc90ab42db | ||
| 
						 | 
					8d677c10f9 | ||
| 
						 | 
					cb5320014d | ||
| 
						 | 
					9a97446468 | ||
| 
						 | 
					80c25ba676 | ||
| 
						 | 
					eb55a6f455 | ||
| 
						 | 
					be8b8603d6 | ||
| 
						 | 
					86de216da3 | ||
| 
						 | 
					bedcd9385f | ||
| 
						 | 
					2507c8cfb3 | ||
| 
						 | 
					98e75c0b69 | ||
| 
						 | 
					2cf51451f3 | ||
| 
						 | 
					50e56c1d8c | ||
| 
						 | 
					2d17250368 | ||
| 
						 | 
					aa701624b1 | ||
| 
						 | 
					396e300449 | ||
| 
						 | 
					402634f8aa | ||
| 
						 | 
					b11980d79a | ||
| 
						 | 
					f15c99f4d4 | ||
| 
						 | 
					507ea77b82 | ||
| 
						 | 
					556803fc3d | ||
| 
						 | 
					1a9a506cfb | ||
| 
						 | 
					5030cc69ff | ||
| 
						 | 
					721cbae7e6 | ||
| 
						 | 
					372e74903e | ||
| 
						 | 
					728432aed0 | ||
| 
						 | 
					8e75dcf587 | ||
| 
						 | 
					396a2dc071 | ||
| 
						 | 
					001c957676 | ||
| 
						 | 
					2507d846e1 | ||
| 
						 | 
					432785095c | ||
| 
						 | 
					a027bba22a | ||
| 
						 | 
					13e742a439 | ||
| 
						 | 
					2794dec7b2 | ||
| 
						 | 
					2035e2db68 | ||
| 
						 | 
					be85620419 | ||
| 
						 | 
					b5e972fdd3 | ||
| 
						 | 
					a15ba3cca3 | ||
| 
						 | 
					7c17c20a56 | ||
| 
						 | 
					5ab53da9fb | ||
| 
						 | 
					245daa2b73 | ||
| 
						 | 
					cb22d2ae5a | ||
| 
						 | 
					b3b1eb5735 | ||
| 
						 | 
					d42d100433 | ||
| 
						 | 
					9a0db453ba | ||
| 
						 | 
					cb6e0ed17a | ||
| 
						 | 
					e5d5019a23 | ||
| 
						 | 
					d6be3124f2 | ||
| 
						 | 
					eb0e2a5c5d | ||
| 
						 | 
					0d25eb7800 | ||
| 
						 | 
					ae2f46597a | ||
| 
						 | 
					9ad2eb6a6e | ||
| 
						 | 
					f4961dc2af | ||
| 
						 | 
					40ced6c187 | ||
| 
						 | 
					f1817dd4d0 | ||
| 
						 | 
					5891dae67c | ||
| 
						 | 
					1d6d4efea5 | ||
| 
						 | 
					0fee334404 | ||
| 
						 | 
					141f7d263b | ||
| 
						 | 
					ae3254a52d | ||
| 
						 | 
					9720dd4314 | ||
| 
						 | 
					83d6620986 | ||
| 
						 | 
					347fc5d8cd | ||
| 
						 | 
					a5d8c1c291 | ||
| 
						 | 
					902795b2f1 | ||
| 
						 | 
					2a8c2799e1 | ||
| 
						 | 
					2ad310ffde | ||
| 
						 | 
					6cbc78906b | ||
| 
						 | 
					fffcf87a55 | ||
| 
						 | 
					3adca975dc | ||
| 
						 | 
					517899e6c8 | ||
| 
						 | 
					f61bbf8da5 | ||
| 
						 | 
					1f31458a77 | ||
| 
						 | 
					5fbc59cac6 | ||
| 
						 | 
					370ac32030 | ||
| 
						 | 
					dd90a91d87 | ||
| 
						 | 
					176b59d157 | ||
| 
						 | 
					907f04a303 | ||
| 
						 | 
					f3b355fec3 | ||
| 
						 | 
					c4ce10773f | ||
| 
						 | 
					d46de4ce48 | ||
| 
						 | 
					418df5ea23 | ||
| 
						 | 
					d163a2cc46 | ||
| 
						 | 
					72df35acf2 | ||
| 
						 | 
					f92b196723 | ||
| 
						 | 
					e94118ae2a | ||
| 
						 | 
					106a9a5d7e | ||
| 
						 | 
					cb972a4fe7 | ||
| 
						 | 
					ee2d14be94 | ||
| 
						 | 
					3d2c3fa5fc | ||
| 
						 | 
					ba5693686e | ||
| 
						 | 
					59b5ab4aa7 | ||
| 
						 | 
					c22ed559bb | ||
| 
						 | 
					4b6f33a5c2 | ||
| 
						 | 
					c36d3840ff | ||
| 
						 | 
					05bdebb6e0 | ||
| 
						 | 
					32b2ad7e07 | ||
| 
						 | 
					1977240204 | ||
| 
						 | 
					939b496027 | ||
| 
						 | 
					cce3e4adb7 | ||
| 
						 | 
					f3e85f4359 | ||
| 
						 | 
					cc74177e71 | ||
| 
						 | 
					e2cf18c635 | ||
| 
						 | 
					df00b6eb5e | ||
| 
						 | 
					1ee85aab75 | ||
| 
						 | 
					029e8f3ac9 | ||
| 
						 | 
					28ea6ad612 | ||
| 
						 | 
					4ae1c7771d | ||
| 
						 | 
					dbcf8e3319 | ||
| 
						 | 
					5fcfef49d9 | ||
| 
						 | 
					8af1319270 | ||
| 
						 | 
					38b7073328 | ||
| 
						 | 
					75077a2277 | ||
| 
						 | 
					c62592e52f | ||
| 
						 | 
					f460f050c2 | ||
| 
						 | 
					eb797fde3f | ||
| 
						 | 
					b484b040e3 | ||
| 
						 | 
					726b5e7132 | ||
| 
						 | 
					0a9f8e0621 | ||
| 
						 | 
					1c687ff4dd | ||
| 
						 | 
					c6a39046f5 | ||
| 
						 | 
					cf1bf3f032 | ||
| 
						 | 
					f7bf8e02df | ||
| 
						 | 
					3b509e8cdc | ||
| 
						 | 
					63830384e9 | ||
| 
						 | 
					ff4de7dde9 | ||
| 
						 | 
					3372aeed2c | ||
| 
						 | 
					8568170d77 | ||
| 
						 | 
					f1612746ec | ||
| 
						 | 
					5a1f055d91 | ||
| 
						 | 
					e96de9822e | ||
| 
						 | 
					2df0ba9b4f | ||
| 
						 | 
					76b49a8ad7 | ||
| 
						 | 
					5e0ec9012b | ||
| 
						 | 
					5c122908ab | ||
| 
						 | 
					1c70c783af | ||
| 
						 | 
					9dff24e43a | ||
| 
						 | 
					6865dea2d6 | ||
| 
						 | 
					76d0c6d48e | ||
| 
						 | 
					a329ae2268 | ||
| 
						 | 
					f3c4abb377 | ||
| 
						 | 
					189e20c68c | ||
| 
						 | 
					4b771121f2 | ||
| 
						 | 
					ee827adf04 | ||
| 
						 | 
					cd258a84db | ||
| 
						 | 
					017f695f2c | ||
| 
						 | 
					ee900ed1f7 | ||
| 
						 | 
					39b36cb438 | ||
| 
						 | 
					26800340db | ||
| 
						 | 
					592ac25342 | ||
| 
						 | 
					d889682208 | ||
| 
						 | 
					951ede2a06 | ||
| 
						 | 
					974d4d675c | ||
| 
						 | 
					3be5df2272 | ||
| 
						 | 
					80a06268ae | ||
| 
						 | 
					e3dd33c25c | ||
| 
						 | 
					d695a02254 | ||
| 
						 | 
					a209623fbb | ||
| 
						 | 
					92caee08d3 | ||
| 
						 | 
					0725acd071 | ||
| 
						 | 
					5fa7c10bc4 | ||
| 
						 | 
					96d9674646 | ||
| 
						 | 
					32d3b0f52f | ||
| 
						 | 
					31d085ca74 | ||
| 
						 | 
					c70908d247 | ||
| 
						 | 
					e963109fcd | ||
| 
						 | 
					da23637e8e | ||
| 
						 | 
					5c3fbbc875 | ||
| 
						 | 
					40f26ac782 | ||
| 
						 | 
					89c2720298 | ||
| 
						 | 
					047cdde7a5 | ||
| 
						 | 
					10473a5a2c | ||
| 
						 | 
					bd41063b11 | ||
| 
						 | 
					0186f7bf87 | ||
| 
						 | 
					10a612a9e4 | ||
| 
						 | 
					a20db08e77 | ||
| 
						 | 
					9da34ad6cb | ||
| 
						 | 
					a63d3ac012 | ||
| 
						 | 
					8a46e51ed8 | ||
| 
						 | 
					fe9b85c3cb | ||
| 
						 | 
					42c9c7103c | ||
| 
						 | 
					4ebc70cc51 | ||
| 
						 | 
					2674af2f79 | ||
| 
						 | 
					bae9b9915a | ||
| 
						 | 
					750190567a | ||
| 
						 | 
					23a9b24aa1 | ||
| 
						 | 
					5d74b4b4b3 | ||
| 
						 | 
					d635f4bb36 | ||
| 
						 | 
					117476ba30 | ||
| 
						 | 
					a6a704f448 | ||
| 
						 | 
					506c106880 | ||
| 
						 | 
					686d82a7a2 | ||
| 
						 | 
					8ca79fcbf4 | ||
| 
						 | 
					a4517be9e3 | ||
| 
						 | 
					6e24e1cdd2 | ||
| 
						 | 
					ffc69bd942 | ||
| 
						 | 
					82123b5e94 | ||
| 
						 | 
					cd56a08d4e | ||
| 
						 | 
					e2acb69c76 | ||
| 
						 | 
					c982285ab6 | ||
| 
						 | 
					b485d97634 | ||
| 
						 | 
					636c42d747 | ||
| 
						 | 
					28e4f659c5 | ||
| 
						 | 
					6a43243d1d | ||
| 
						 | 
					f08731cd82 | ||
| 
						 | 
					f4b8760056 | ||
| 
						 | 
					d3554bff69 | ||
| 
						 | 
					3f9117e161 | ||
| 
						 | 
					eadc81e7dd | ||
| 
						 | 
					a2fcab9978 | ||
| 
						 | 
					1a09816435 | ||
| 
						 | 
					0e978b9a5d | ||
| 
						 | 
					f06249f112 | ||
| 
						 | 
					2407241fb2 | ||
| 
						 | 
					3942e7d9eb | ||
| 
						 | 
					2679485e69 | ||
| 
						 | 
					e6dcb08984 | ||
| 
						 | 
					0c8f422999 | ||
| 
						 | 
					cc27bec2b4 | ||
| 
						 | 
					f5ee521307 | ||
| 
						 | 
					58d8a271ab | ||
| 
						 | 
					8b7e469d06 | ||
| 
						 | 
					93cb447df2 | ||
| 
						 | 
					521246e608 | ||
| 
						 | 
					ef6d3485ec | ||
| 
						 | 
					a67303954c | ||
| 
						 | 
					cb9d5b7b53 | ||
| 
						 | 
					876ed10574 | ||
| 
						 | 
					bc2e18a3c8 | ||
| 
						 | 
					0440d4ebe4 | ||
| 
						 | 
					183db9af80 | ||
| 
						 | 
					9f11421950 | ||
| 
						 | 
					51527f1e35 | ||
| 
						 | 
					1810b04728 | ||
| 
						 | 
					5c921f14cb | ||
| 
						 | 
					d58a852fbd | ||
| 
						 | 
					323a7e76e6 | ||
| 
						 | 
					059907771b | ||
| 
						 | 
					ea65e92b22 | ||
| 
						 | 
					f3cc3da447 | ||
| 
						 | 
					1aff39de76 | ||
| 
						 | 
					eafdbd8ec3 | ||
| 
						 | 
					1159e24d56 | ||
| 
						 | 
					b91058d222 | ||
| 
						 | 
					89117535f1 | ||
| 
						 | 
					08a2df480d | ||
| 
						 | 
					9cd061725b | ||
| 
						 | 
					e347d80287 | ||
| 
						 | 
					9e7a5464d7 | ||
| 
						 | 
					e224c45317 | ||
| 
						 | 
					e961fa4479 | ||
| 
						 | 
					aafdbbc469 | ||
| 
						 | 
					a9ea906654 | ||
| 
						 | 
					bb14c2c9ca | ||
| 
						 | 
					a1331af032 | ||
| 
						 | 
					e48e86232e | ||
| 
						 | 
					66aacf3872 | ||
| 
						 | 
					97ac0d8564 | ||
| 
						 | 
					f8e662e71c | ||
| 
						 | 
					468e04bf1f | ||
| 
						 | 
					ac7d33deec | ||
| 
						 | 
					6b7c68e038 | ||
| 
						 | 
					81ce20e6ac | ||
| 
						 | 
					324a977492 | ||
| 
						 | 
					69aeb99f32 | ||
| 
						 | 
					53e652ae44 | ||
| 
						 | 
					131d3fdfe2 | ||
| 
						 | 
					1895583835 | ||
| 
						 | 
					5226c62b76 | ||
| 
						 | 
					491f3e4e8e | ||
| 
						 | 
					184693f4af | ||
| 
						 | 
					925bfca5d3 | ||
| 
						 | 
					90a5adffc7 | ||
| 
						 | 
					73f8982017 | 
							
								
								
									
										22
									
								
								.cvsignore
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								.cvsignore
									
									
									
									
									
								
							@@ -1,22 +0,0 @@
 | 
			
		||||
openssl.pc
 | 
			
		||||
libcrypto.pc
 | 
			
		||||
libssl.pc
 | 
			
		||||
MINFO
 | 
			
		||||
makefile.one
 | 
			
		||||
tmp
 | 
			
		||||
out
 | 
			
		||||
outinc
 | 
			
		||||
rehash.time
 | 
			
		||||
testlog
 | 
			
		||||
make.log
 | 
			
		||||
maketest.log
 | 
			
		||||
cctest
 | 
			
		||||
cctest.c
 | 
			
		||||
cctest.a
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
Makefile
 | 
			
		||||
*.dll*
 | 
			
		||||
*.so*
 | 
			
		||||
*.sl*
 | 
			
		||||
*.dylib*
 | 
			
		||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -7,6 +7,7 @@
 | 
			
		||||
.#*
 | 
			
		||||
#*#
 | 
			
		||||
*~
 | 
			
		||||
/.dir-locals.el
 | 
			
		||||
 | 
			
		||||
# Top level excludes
 | 
			
		||||
/Makefile.bak
 | 
			
		||||
@@ -95,8 +96,12 @@ tags
 | 
			
		||||
TAGS
 | 
			
		||||
 | 
			
		||||
# Windows
 | 
			
		||||
/tmp32
 | 
			
		||||
/tmp32.dbg
 | 
			
		||||
/tmp32dll
 | 
			
		||||
/tmp32dll.dbg
 | 
			
		||||
/out32
 | 
			
		||||
/out32.dbg
 | 
			
		||||
/out32dll
 | 
			
		||||
/out32dll.dbg
 | 
			
		||||
/inc32
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										54
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
language: c
 | 
			
		||||
 | 
			
		||||
addons:
 | 
			
		||||
    apt_packages:
 | 
			
		||||
        - binutils-mingw-w64
 | 
			
		||||
        - gcc-mingw-w64
 | 
			
		||||
 | 
			
		||||
os:
 | 
			
		||||
    - linux
 | 
			
		||||
    - osx
 | 
			
		||||
 | 
			
		||||
compiler:
 | 
			
		||||
    - clang
 | 
			
		||||
    - gcc
 | 
			
		||||
    - i686-w64-mingw32-gcc
 | 
			
		||||
    - x86_64-w64-mingw32-gcc
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
    - CONFIG_OPTS=""
 | 
			
		||||
    - CONFIG_OPTS="shared"
 | 
			
		||||
    - CONFIG_OPTS="-d --strict-warnings"
 | 
			
		||||
 | 
			
		||||
matrix:
 | 
			
		||||
    exclude:
 | 
			
		||||
        - os: osx
 | 
			
		||||
          compiler: i686-w64-mingw32-gcc
 | 
			
		||||
        - os: osx
 | 
			
		||||
          compiler: x86_64-w64-mingw32-gcc
 | 
			
		||||
        - compiler: i686-w64-mingw32-gcc
 | 
			
		||||
          env: CONFIG_OPTS="-d --strict-warnings"
 | 
			
		||||
        - compiler: x86_64-w64-mingw32-gcc
 | 
			
		||||
          env: CONFIG_OPTS="-d --strict-warnings"
 | 
			
		||||
 | 
			
		||||
before_script:
 | 
			
		||||
    - if [ "$CC" == i686-w64-mingw32-gcc ]; then
 | 
			
		||||
          export CROSS_COMPILE=${CC%%gcc}; unset CC;
 | 
			
		||||
          ./Configure mingw $CONFIG_OPTS;
 | 
			
		||||
      elif [ "$CC" == x86_64-w64-mingw32-gcc ]; then
 | 
			
		||||
          export CROSS_COMPILE=${CC%%gcc}; unset CC;
 | 
			
		||||
          ./Configure mingw64 $CONFIG_OPTS;
 | 
			
		||||
      else
 | 
			
		||||
          ./config $CONFIG_OPTS;
 | 
			
		||||
      fi
 | 
			
		||||
 | 
			
		||||
script:
 | 
			
		||||
    - make
 | 
			
		||||
    - if [ -z "$CROSS_COMPILE" ]; then make test; fi
 | 
			
		||||
 | 
			
		||||
notifications:
 | 
			
		||||
    recipient:
 | 
			
		||||
        - openssl-commits@openssl.org
 | 
			
		||||
    email:
 | 
			
		||||
        on_success: change
 | 
			
		||||
        on_failure: always
 | 
			
		||||
							
								
								
									
										38
									
								
								CONTRIBUTING
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								CONTRIBUTING
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
HOW TO CONTRIBUTE TO OpenSSL
 | 
			
		||||
----------------------------
 | 
			
		||||
 | 
			
		||||
Development is coordinated on the openssl-dev mailing list (see
 | 
			
		||||
http://www.openssl.org for information on subscribing). If you
 | 
			
		||||
would like to submit a patch, send it to rt@openssl.org with
 | 
			
		||||
the string "[PATCH]" in the subject. Please be sure to include a
 | 
			
		||||
textual explanation of what your patch does.
 | 
			
		||||
 | 
			
		||||
You can also make GitHub pull requests. If you do this, please also send
 | 
			
		||||
mail to rt@openssl.org with a brief description and a link to the PR so
 | 
			
		||||
that we can more easily keep track of it.
 | 
			
		||||
 | 
			
		||||
If you are unsure as to whether a feature will be useful for the general
 | 
			
		||||
OpenSSL community please discuss it on the openssl-dev mailing list first.
 | 
			
		||||
Someone may be already working on the same thing or there may be a good
 | 
			
		||||
reason as to why that feature isn't implemented.
 | 
			
		||||
 | 
			
		||||
Patches should be as up to date as possible, preferably relative to the
 | 
			
		||||
current Git or the last snapshot. They should follow our coding style
 | 
			
		||||
(see https://www.openssl.org/policies/codingstyle.html) and compile without
 | 
			
		||||
warnings using the --strict-warnings flag.  OpenSSL compiles on many varied
 | 
			
		||||
platforms: try to ensure you only use portable features.
 | 
			
		||||
 | 
			
		||||
Our preferred format for patch files is "git format-patch" output. For example
 | 
			
		||||
to provide a patch file containing the last commit in your local git repository
 | 
			
		||||
use the following command:
 | 
			
		||||
 | 
			
		||||
# git format-patch --stdout HEAD^ >mydiffs.patch
 | 
			
		||||
 | 
			
		||||
Another method of creating an acceptable patch file without using git is as
 | 
			
		||||
follows:
 | 
			
		||||
 | 
			
		||||
# cd openssl-work
 | 
			
		||||
# [your changes]
 | 
			
		||||
# ./Configure dist; make clean
 | 
			
		||||
# cd ..
 | 
			
		||||
# diff -ur openssl-orig openssl-work > mydiffs.patch
 | 
			
		||||
							
								
								
									
										127
									
								
								Configure
									
									
									
									
									
								
							
							
						
						
									
										127
									
								
								Configure
									
									
									
									
									
								
							@@ -105,6 +105,8 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimenta
 | 
			
		||||
 | 
			
		||||
my $gcc_devteam_warn = "-Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED";
 | 
			
		||||
 | 
			
		||||
my $clang_devteam_warn = "-Wno-unused-parameter -Wno-missing-field-initializers -Wno-language-extension-token -Wno-extended-offsetof -Qunused-arguments";
 | 
			
		||||
 | 
			
		||||
my $strict_warnings = 0;
 | 
			
		||||
 | 
			
		||||
my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
 | 
			
		||||
@@ -185,18 +187,19 @@ my %table=(
 | 
			
		||||
"debug-steve-opt", "gcc:$gcc_devteam_warn -m64 -O3 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-geoff32","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:BN_LLONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-geoff64","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -O1 -ggdb2 -Wall -Werror -Wundef -pedantic -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Wmissing-prototypes -Wmissing-declarations -Wno-long-long::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-pentium","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentium -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 | 
			
		||||
"debug-linux-ppro","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentiumpro -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 | 
			
		||||
"debug-linux-elf","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall::-D_REENTRANT::-lefence -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-elf-noefence","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-ia32-aes", "gcc:-DAES_EXPERIMENTAL -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes_x86core.o aes_cbc.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o::ghash-x86.o::elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-generic32","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-generic64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-x86_64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -DTERMIO -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"debug-linux-pentium","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -mcpu=pentium -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 | 
			
		||||
"debug-linux-ppro","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -mcpu=pentiumpro -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
 | 
			
		||||
"debug-linux-elf","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -march=i486 -Wall::-D_REENTRANT::-lefence -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-elf-noefence","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-ia32-aes", "gcc:-DAES_EXPERIMENTAL -DL_ENDIAN -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes_x86core.o aes_cbc.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o::ghash-x86.o::elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-generic32","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-generic64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-linux-x86_64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"debug-linux-x86_64-clang","clang: -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -g -Wall -Qunused-arguments::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"dist",		"cc:-O::(unknown)::::::",
 | 
			
		||||
 | 
			
		||||
# Basic configs that should work on any (32 and less bit) box
 | 
			
		||||
@@ -230,12 +233,12 @@ 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_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"solaris-sparcv8-gcc","gcc:-mcpu=v8 -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_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:${sparcv9_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:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:solaris-shared:-fPIC:-m64 -shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
 | 
			
		||||
####
 | 
			
		||||
"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_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_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv8-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mcpu=v8 -Wall -DB_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-solaris-sparcv9-gcc","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_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:${sparcv9_asm}:dlfcn:solaris-shared:-fPIC:-shared:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### SPARC Solaris with Sun C setups
 | 
			
		||||
@@ -252,20 +255,20 @@ my %table=(
 | 
			
		||||
 | 
			
		||||
#### SunOS configs, assuming sparc for the gcc one.
 | 
			
		||||
#"sunos-cc", "cc:-O4 -DNOPROTO -DNOCONST::(unknown):SUNOS::DES_UNROLL:${no_asm}::",
 | 
			
		||||
"sunos-gcc","gcc:-O3 -mv8 -Dssize_t=int::(unknown):SUNOS::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1:${no_asm}::",
 | 
			
		||||
"sunos-gcc","gcc:-O3 -mcpu=v8 -Dssize_t=int::(unknown):SUNOS::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL DES_PTR DES_RISC1:${no_asm}::",
 | 
			
		||||
 | 
			
		||||
#### IRIX 5.x configs
 | 
			
		||||
# -mips2 flag is added by ./config when appropriate.
 | 
			
		||||
"irix-gcc","gcc:-O3 -DTERMIOS -DB_ENDIAN::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK DES_UNROLL DES_RISC2 DES_PTR BF_PTR:${mips32_asm}:o32:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-cc", "cc:-O2 -use_readonly_const -DTERMIOS -DB_ENDIAN::(unknown):::BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC2 DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-gcc","gcc:-O3 -DB_ENDIAN::(unknown):::BN_LLONG MD2_CHAR RC4_INDEX RC4_CHAR RC4_CHUNK DES_UNROLL DES_RISC2 DES_PTR BF_PTR:${mips32_asm}:o32:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-cc", "cc:-O2 -use_readonly_const -DB_ENDIAN::(unknown):::BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC2 DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
#### 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:${mips64_asm}:n32:dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
 | 
			
		||||
"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:${mips64_asm}:n32:dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
 | 
			
		||||
"irix-mips3-gcc","gcc:-mabi=n32 -O3 -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:${mips64_asm}:n32:dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
 | 
			
		||||
"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -G0 -rdata_shared -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT:${mips64_asm}:n32:dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
 | 
			
		||||
# 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:${mips64_asm}:64:dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"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:${mips64_asm}:64:dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -O3 -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips64_asm}:64:dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -G0 -rdata_shared -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips64_asm}:64:dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
 | 
			
		||||
#### Unified HP-UX ANSI C configs.
 | 
			
		||||
# Special notes:
 | 
			
		||||
@@ -345,23 +348,24 @@ 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:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-generic32","gcc:-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 -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# It's believed that majority of ARM toolchains predefine appropriate -march.
 | 
			
		||||
# If you compiler does not, do complement config command line with one!
 | 
			
		||||
"linux-armv4",	"gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-armv4",	"gcc:-O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
#### 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_asm}:a.out",
 | 
			
		||||
"linux-ia32-icc",	"icc:-DL_ENDIAN -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 -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 -O3 -fomit-frame-pointer -march=i486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out",
 | 
			
		||||
####
 | 
			
		||||
"linux-generic64","gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ppc64",	"gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-ia64",	"gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-ecc","ecc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-icc","icc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-x86_64",	"gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux64-s390x",	"gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-generic64","gcc:-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 -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-ia64",	"gcc:-DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-ecc","ecc:-DL_ENDIAN -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-ia64-icc","icc:-DL_ENDIAN -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-x86_64",	"gcc:-m64 -DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux-x86_64-clang","clang: -m64 -DL_ENDIAN -O3 -Wall -Qunused-arguments::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux64-s390x",	"gcc:-m64 -DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
#### So called "highgprs" target for z/Architecture CPUs
 | 
			
		||||
# "Highgprs" is kernel feature first implemented in Linux 2.6.32, see
 | 
			
		||||
# /proc/cpuinfo. The idea is to preserve most significant bits of
 | 
			
		||||
@@ -375,16 +379,16 @@ my %table=(
 | 
			
		||||
# ldconfig and run-time linker to autodiscover. Unfortunately it
 | 
			
		||||
# doesn't work just yet, because of couple of bugs in glibc
 | 
			
		||||
# sysdeps/s390/dl-procinfo.c affecting ldconfig and ld.so.1...
 | 
			
		||||
"linux32-s390x",	"gcc:-m31 -Wa,-mzarch -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$s390x_asm;$asm=~s/bn\-s390x\.o/bn_asm.o/;$asm}.":31:dlfcn:linux-shared:-fPIC:-m31:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/highgprs",
 | 
			
		||||
"linux32-s390x",	"gcc:-m31 -Wa,-mzarch -DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$s390x_asm;$asm=~s/bn\-s390x\.o/bn_asm.o/;$asm}.":31:dlfcn:linux-shared:-fPIC:-m31:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/highgprs",
 | 
			
		||||
#### 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_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-sparcv8","gcc:-mcpu=v8 -DB_ENDIAN -O3 -fomit-frame-pointer -Wall -DBN_DIV2W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv8_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:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-sparcv9","gcc:-m32 -mcpu=ultrasparc -DB_ENDIAN -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${sparcv9_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:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
"linux64-sparcv9","gcc:-m64 -mcpu=ultrasparc -DB_ENDIAN -O3 -fomit-frame-pointer -Wall::-D_REENTRANT:ULTRASPARC:-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL BF_PTR:${sparcv9_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
 | 
			
		||||
#### 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
 | 
			
		||||
@@ -398,30 +402,30 @@ my %table=(
 | 
			
		||||
#
 | 
			
		||||
#					<appro@fy.chalmers.se>
 | 
			
		||||
#
 | 
			
		||||
"linux-alpha-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-alpha+bwx-gcc","gcc:-O3 -DL_ENDIAN -DTERMIO::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
 | 
			
		||||
"linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN -DTERMIO::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
 | 
			
		||||
"linux-alpha-gcc","gcc:-O3 -DL_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-alpha+bwx-gcc","gcc:-O3 -DL_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${alpha_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"linux-alpha-ccc","ccc:-fast -readonly_strings -DL_ENDIAN::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
 | 
			
		||||
"linux-alpha+bwx-ccc","ccc:-fast -readonly_strings -DL_ENDIAN::-D_REENTRANT:::SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC1 DES_UNROLL:${alpha_asm}",
 | 
			
		||||
 | 
			
		||||
# Android: linux-* but without -DTERMIO and pointers to headers and libs.
 | 
			
		||||
# Android: linux-* but without pointers to headers and libs.
 | 
			
		||||
"android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### *BSD [do see comment about ${BSDthreads} above!]
 | 
			
		||||
"BSD-generic32","gcc:-DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-x86",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out: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_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-generic32","gcc:-O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-x86",	"gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out:dlfcn:bsd-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-x86-elf",	"gcc:-DL_ENDIAN -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 -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 -O3 -mcpu=v8 -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${sparcv8_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)",
 | 
			
		||||
"BSD-generic64","gcc:-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}:::BN_LLONG RC2_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC2 BF_PTR:${sparcv9_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 DES_UNROLL DES_INT:${ia64_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-x86_64",	"gcc:-DL_ENDIAN -DTERMIOS -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-sparc64",	"gcc:-DB_ENDIAN -O3 -DMD32_REG_T=int -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC2 BF_PTR:${sparcv9_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-ia64",	"gcc:-DL_ENDIAN -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"BSD-x86_64",	"gcc:-DL_ENDIAN -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
"bsdi-elf-gcc",     "gcc:-DPERL5 -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall::(unknown)::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
@@ -433,8 +437,8 @@ my %table=(
 | 
			
		||||
 | 
			
		||||
# QNX
 | 
			
		||||
"qnx4",	"cc:-DL_ENDIAN -DTERMIO::(unknown):::${x86_gcc_des} ${x86_gcc_opts}:",
 | 
			
		||||
"QNX6",       "gcc:-DTERMIOS::::-lsocket::${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"QNX6-i386",  "gcc:-DL_ENDIAN -DTERMIOS -O2 -Wall::::-lsocket:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"QNX6",       "gcc:::::-lsocket::${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"QNX6-i386",  "gcc:-DL_ENDIAN -O2 -Wall::::-lsocket:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# BeOS
 | 
			
		||||
"beos-x86-r5",   "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -mcpu=pentium -Wall::-D_REENTRANT:BEOS:-lbe -lnet:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:beos:beos-shared:-fPIC -DPIC:-shared:.so",
 | 
			
		||||
@@ -507,7 +511,7 @@ my %table=(
 | 
			
		||||
"SINIX-N","/usr/ucb/cc:-O2 -misaligned::(unknown)::-lucb:RC4_INDEX RC4_CHAR:::",
 | 
			
		||||
 | 
			
		||||
# SIEMENS BS2000/OSD: an EBCDIC-based mainframe
 | 
			
		||||
"BS2000-OSD","c89:-O -XLLML -XLLMK -XL -DB_ENDIAN -DTERMIOS -DCHARSET_EBCDIC::(unknown)::-lsocket -lnsl:THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR RC4_INDEX RC4_CHAR BF_PTR:::",
 | 
			
		||||
"BS2000-OSD","c89:-O -XLLML -XLLMK -XL -DB_ENDIAN -DCHARSET_EBCDIC::(unknown)::-lsocket -lnsl:THIRTY_TWO_BIT DES_PTR DES_UNROLL MD2_CHAR RC4_INDEX RC4_CHAR BF_PTR:::",
 | 
			
		||||
 | 
			
		||||
# OS/390 Unix an EBCDIC-based Unix system on IBM mainframe
 | 
			
		||||
# You need to compile using the c89.sh wrapper in the tools directory, because the
 | 
			
		||||
@@ -567,7 +571,7 @@ my %table=(
 | 
			
		||||
"netware-libc-bsdsock-gcc", "i586-netware-gcc:-nostdinc -I/ndk/libc/include -DNETWARE_BSDSOCK -DL_ENDIAN -DNETWARE_LIBC -DOPENSSL_SYSNAME_NETWARE -DTERMIO -O2 -Wall:::::BN_LLONG ${x86_gcc_opts}::",
 | 
			
		||||
 | 
			
		||||
# DJGPP
 | 
			
		||||
"DJGPP", "gcc:-I/dev/env/WATT_ROOT/inc -DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O2 -Wall:::MSDOS:-L/dev/env/WATT_ROOT/lib -lwatt:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out:",
 | 
			
		||||
"DJGPP", "gcc:-I/dev/env/WATT_ROOT/inc -DTERMIO -DL_ENDIAN -fomit-frame-pointer -O2 -Wall:::MSDOS:-L/dev/env/WATT_ROOT/lib -lwatt:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out:",
 | 
			
		||||
 | 
			
		||||
# Ultrix from Bernhard Simon <simon@zid.tuwien.ac.at>
 | 
			
		||||
"ultrix-cc","cc:-std1 -O -Olimit 2500 -DL_ENDIAN::(unknown):::::::",
 | 
			
		||||
@@ -593,7 +597,7 @@ my %table=(
 | 
			
		||||
"newsos4-gcc","gcc:-O -DB_ENDIAN::(unknown):NEWS4:-lmld -liberty:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::",
 | 
			
		||||
 | 
			
		||||
##### GNU Hurd
 | 
			
		||||
"hurd-x86",  "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC",
 | 
			
		||||
"hurd-x86",  "gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC",
 | 
			
		||||
 | 
			
		||||
##### OS/2 EMX
 | 
			
		||||
"OS2-EMX", "gcc::::::::",
 | 
			
		||||
@@ -1574,11 +1578,20 @@ if ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
 | 
			
		||||
 | 
			
		||||
if ($strict_warnings)
 | 
			
		||||
	{
 | 
			
		||||
	my $ecc = $cc;
 | 
			
		||||
	$ecc = "clang" if `$cc --version 2>&1` =~ /clang/;
 | 
			
		||||
	my $wopt;
 | 
			
		||||
	die "ERROR --strict-warnings requires gcc" unless ($cc =~ /gcc$/);
 | 
			
		||||
	die "ERROR --strict-warnings requires gcc or clang" unless ($ecc =~ /gcc$/ or $ecc =~ /clang$/);
 | 
			
		||||
	foreach $wopt (split /\s+/, $gcc_devteam_warn)
 | 
			
		||||
		{
 | 
			
		||||
		$cflags .= " $wopt" unless ($cflags =~ /$wopt/)
 | 
			
		||||
		$cflags .= " $wopt" unless ($cflags =~ /(^|\s)$wopt(\s|$)/)
 | 
			
		||||
		}
 | 
			
		||||
	if ($ecc eq "clang")
 | 
			
		||||
		{
 | 
			
		||||
		foreach $wopt (split /\s+/, $clang_devteam_warn)
 | 
			
		||||
			{
 | 
			
		||||
			$cflags .= " $wopt" unless ($cflags =~ /(^|\s)$wopt(\s|$)/)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										68
									
								
								Makefile.org
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								Makefile.org
									
									
									
									
									
								
							@@ -184,7 +184,7 @@ WTARFILE=       $(NAME)-win.tar
 | 
			
		||||
EXHEADER=       e_os2.h
 | 
			
		||||
HEADER=         e_os.h
 | 
			
		||||
 | 
			
		||||
all: Makefile build_all openssl.pc libssl.pc libcrypto.pc
 | 
			
		||||
all: Makefile build_all
 | 
			
		||||
 | 
			
		||||
# as we stick to -e, CLEARENV ensures that local variables in lower
 | 
			
		||||
# Makefiles remain local and variable. $${VAR+VAR} is tribute to Korn
 | 
			
		||||
@@ -268,21 +268,25 @@ reflect:
 | 
			
		||||
	@[ -n "$(THIS)" ] && $(CLEARENV) && $(MAKE) $(THIS) -e $(BUILDENV)
 | 
			
		||||
 | 
			
		||||
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_libcrypto build_libssl openssl.pc
 | 
			
		||||
 | 
			
		||||
build_libcrypto: build_crypto build_engines libcrypto.pc
 | 
			
		||||
build_libssl: build_ssl libssl.pc
 | 
			
		||||
 | 
			
		||||
build_crypto:
 | 
			
		||||
	@dir=crypto; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_ssl:
 | 
			
		||||
build_ssl: build_crypto
 | 
			
		||||
	@dir=ssl; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_engines:
 | 
			
		||||
build_engines: build_crypto
 | 
			
		||||
	@dir=engines; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_apps:
 | 
			
		||||
build_apps: build_libs
 | 
			
		||||
	@dir=apps; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tests:
 | 
			
		||||
build_tests: build_libs
 | 
			
		||||
	@dir=test; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
build_tools:
 | 
			
		||||
build_tools: build_libs
 | 
			
		||||
	@dir=tools; target=all; $(BUILD_ONE_CMD)
 | 
			
		||||
 | 
			
		||||
all_testapps: build_libs build_testapps
 | 
			
		||||
@@ -459,6 +463,9 @@ tests: rehash
 | 
			
		||||
report:
 | 
			
		||||
	@$(PERL) util/selftest.pl
 | 
			
		||||
 | 
			
		||||
update: errors stacks util/libeay.num util/ssleay.num TABLE
 | 
			
		||||
	@set -e; target=update; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@set -e; target=depend; $(RECURSIVE_BUILD_CMD)
 | 
			
		||||
 | 
			
		||||
@@ -483,50 +490,37 @@ util/libeay.num::
 | 
			
		||||
util/ssleay.num::
 | 
			
		||||
	$(PERL) util/mkdef.pl ssl update
 | 
			
		||||
 | 
			
		||||
crypto/objects/obj_dat.h: crypto/objects/obj_dat.pl crypto/objects/obj_mac.h
 | 
			
		||||
	$(PERL) crypto/objects/obj_dat.pl crypto/objects/obj_mac.h crypto/objects/obj_dat.h
 | 
			
		||||
crypto/objects/obj_mac.h: crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num
 | 
			
		||||
	$(PERL) crypto/objects/objects.pl crypto/objects/objects.txt crypto/objects/obj_mac.num crypto/objects/obj_mac.h
 | 
			
		||||
crypto/objects/obj_xref.h: crypto/objects/objxref.pl crypto/objects/obj_xref.txt crypto/objects/obj_mac.num
 | 
			
		||||
	$(PERL) crypto/objects/objxref.pl crypto/objects/obj_mac.num crypto/objects/obj_xref.txt >crypto/objects/obj_xref.h
 | 
			
		||||
 | 
			
		||||
apps/openssl-vms.cnf: apps/openssl.cnf
 | 
			
		||||
	$(PERL) VMS/VMSify-conf.pl < apps/openssl.cnf > apps/openssl-vms.cnf
 | 
			
		||||
 | 
			
		||||
crypto/bn/bn_prime.h: crypto/bn/bn_prime.pl
 | 
			
		||||
	$(PERL) crypto/bn/bn_prime.pl >crypto/bn/bn_prime.h
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TABLE: Configure
 | 
			
		||||
	(echo 'Output of `Configure TABLE'"':"; \
 | 
			
		||||
	$(PERL) Configure TABLE) > TABLE
 | 
			
		||||
 | 
			
		||||
update: errors stacks util/libeay.num util/ssleay.num crypto/objects/obj_dat.h crypto/objects/obj_xref.h apps/openssl-vms.cnf crypto/bn/bn_prime.h TABLE depend
 | 
			
		||||
 | 
			
		||||
# Build distribution tar-file. As the list of files returned by "find" is
 | 
			
		||||
# pretty long, on several platforms a "too many arguments" error or similar
 | 
			
		||||
# would occur. Therefore the list of files is temporarily stored into a file
 | 
			
		||||
# and read directly, requiring GNU-Tar. Call "make TAR=gtar dist" if the normal
 | 
			
		||||
# tar does not support the --files-from option.
 | 
			
		||||
tar:
 | 
			
		||||
TAR_COMMAND=$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list \
 | 
			
		||||
	                       --owner openssl:0 --group openssl:0 \
 | 
			
		||||
			       --transform 's|^|openssl-$(VERSION)/|' \
 | 
			
		||||
			       -cvf -
 | 
			
		||||
 | 
			
		||||
../$(TARFILE).list:
 | 
			
		||||
	find * \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \
 | 
			
		||||
	       \! -name '*.so' \! -name '*.so.*'  \! -name 'openssl' \
 | 
			
		||||
	       \! -name '*test' \! -name '.#*' \! -name '*~' \
 | 
			
		||||
	    | sort > ../$(TARFILE).list
 | 
			
		||||
 | 
			
		||||
tar: ../$(TARFILE).list
 | 
			
		||||
	find . -type d -print | xargs chmod 755
 | 
			
		||||
	find . -type f -print | xargs chmod a+r
 | 
			
		||||
	find . -type f -perm -0100 -print | xargs chmod a+x
 | 
			
		||||
	find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE | sort > ../$(TARFILE).list; \
 | 
			
		||||
	$(TAR) $(TARFLAGS) --files-from ../$(TARFILE).list -cvf - | \
 | 
			
		||||
	tardy --user_number=0  --user_name=openssl \
 | 
			
		||||
	      --group_number=0 --group_name=openssl \
 | 
			
		||||
	      --prefix=openssl-$(VERSION) - |\
 | 
			
		||||
	gzip --best >../$(TARFILE).gz; \
 | 
			
		||||
	rm -f ../$(TARFILE).list; \
 | 
			
		||||
	$(TAR_COMMAND) | gzip --best >../$(TARFILE).gz
 | 
			
		||||
	rm -f ../$(TARFILE).list
 | 
			
		||||
	ls -l ../$(TARFILE).gz
 | 
			
		||||
 | 
			
		||||
tar-snap:
 | 
			
		||||
	@$(TAR) $(TARFLAGS) -cvf - \
 | 
			
		||||
		`find * \! -path CVS/\* \! -path \*/CVS/\* \! -name CVS \! -name .cvsignore \! -name STATUS \! -name TABLE \! -name '*.o' \! -name '*.a' \! -name '*.so' \! -name '*.so.*'  \! -name 'openssl' \! -name '*test' \! -name '.#*' \! -name '*~' | sort` |\
 | 
			
		||||
	tardy --user_number=0  --user_name=openssl \
 | 
			
		||||
	      --group_number=0 --group_name=openssl \
 | 
			
		||||
	      --prefix=openssl-$(VERSION) - > ../$(TARFILE);\
 | 
			
		||||
tar-snap: ../$(TARFILE).list
 | 
			
		||||
	$(TAR_COMMAND) > ../$(TARFILE)
 | 
			
		||||
	rm -f ../$(TARFILE).list
 | 
			
		||||
	ls -l ../$(TARFILE)
 | 
			
		||||
 | 
			
		||||
dist:   
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										104
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								NEWS
									
									
									
									
									
								
							@@ -5,9 +5,40 @@
 | 
			
		||||
  This file gives a brief overview of the major changes between each OpenSSL
 | 
			
		||||
  release. For more details please read the CHANGES file.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1l and OpenSSL 1.0.1m [under development]
 | 
			
		||||
  Major changes between OpenSSL 1.0.1p and OpenSSL 1.0.1q [3 Dec 2015]
 | 
			
		||||
 | 
			
		||||
      o
 | 
			
		||||
      o Certificate verify crash with missing PSS parameter (CVE-2015-3194)
 | 
			
		||||
      o X509_ATTRIBUTE memory leak (CVE-2015-3195)
 | 
			
		||||
      o Rewrite EVP_DecodeUpdate (base64 decoding) to fix several bugs
 | 
			
		||||
      o In DSA_generate_parameters_ex, if the provided seed is too short,
 | 
			
		||||
        return an error
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1o and OpenSSL 1.0.1p [9 Jul 2015]
 | 
			
		||||
 | 
			
		||||
      o Alternate chains certificate forgery (CVE-2015-1793)
 | 
			
		||||
      o Race condition handling PSK identify hint (CVE-2015-3196)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1n and OpenSSL 1.0.1o [12 Jun 2015]
 | 
			
		||||
 | 
			
		||||
      o Fix HMAC ABI incompatibility
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1m and OpenSSL 1.0.1n [11 Jun 2015]
 | 
			
		||||
 | 
			
		||||
      o Malformed ECParameters causes infinite loop (CVE-2015-1788)
 | 
			
		||||
      o Exploitable out-of-bounds read in X509_cmp_time (CVE-2015-1789)
 | 
			
		||||
      o PKCS7 crash with missing EnvelopedContent (CVE-2015-1790)
 | 
			
		||||
      o CMS verify infinite loop with unknown hash function (CVE-2015-1792)
 | 
			
		||||
      o Race condition handling NewSessionTicket (CVE-2015-1791)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1l and OpenSSL 1.0.1m [19 Mar 2015]
 | 
			
		||||
 | 
			
		||||
      o Segmentation fault in ASN1_TYPE_cmp fix (CVE-2015-0286)
 | 
			
		||||
      o ASN.1 structure reuse memory corruption fix (CVE-2015-0287)
 | 
			
		||||
      o PKCS7 NULL pointer dereferences fix (CVE-2015-0289)
 | 
			
		||||
      o DoS via reachable assert in SSLv2 servers fix (CVE-2015-0293)
 | 
			
		||||
      o Use After Free following d2i_ECPrivatekey error fix (CVE-2015-0209)
 | 
			
		||||
      o X509_to_X509_REQ NULL pointer deref fix (CVE-2015-0288)
 | 
			
		||||
      o Removed the export ciphers from the DEFAULT ciphers
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.1k and OpenSSL 1.0.1l [15 Jan 2015]
 | 
			
		||||
 | 
			
		||||
@@ -107,19 +138,6 @@
 | 
			
		||||
      o Preliminary FIPS capability for unvalidated 2.0 FIPS module.
 | 
			
		||||
      o SRP support.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0j and OpenSSL 1.0.0k [5 Feb 2013]:
 | 
			
		||||
 | 
			
		||||
      o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
 | 
			
		||||
      o Fix OCSP bad key DoS attack CVE-2013-0166
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0i and OpenSSL 1.0.0j [10 May 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix DTLS record length checking bug CVE-2012-2333
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0h and OpenSSL 1.0.0i [19 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for ASN1 overflow bug CVE-2012-2110
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 1.0.0g and OpenSSL 1.0.0h [12 Mar 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CMS/PKCS#7 MMA CVE-2012-0884
 | 
			
		||||
@@ -192,62 +210,6 @@
 | 
			
		||||
      o Opaque PRF Input TLS extension support.
 | 
			
		||||
      o Updated time routines to avoid OS limitations.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8x and OpenSSL 0.9.8y [5 Feb 2013]:
 | 
			
		||||
 | 
			
		||||
      o Fix for SSL/TLS/DTLS CBC plaintext recovery attack CVE-2013-0169
 | 
			
		||||
      o Fix OCSP bad key DoS attack CVE-2013-0166
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8w and OpenSSL 0.9.8x [10 May 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix DTLS record length checking bug CVE-2012-2333
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8v and OpenSSL 0.9.8w [23 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CVE-2012-2131 (corrected fix for 0.9.8 and CVE-2012-2110)
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8u and OpenSSL 0.9.8v [19 Apr 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for ASN1 overflow bug CVE-2012-2110
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8t and OpenSSL 0.9.8u [12 Mar 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for CMS/PKCS#7 MMA CVE-2012-0884
 | 
			
		||||
      o Corrected fix for CVE-2011-4619
 | 
			
		||||
      o Various DTLS fixes.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8s and OpenSSL 0.9.8t [18 Jan 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS DoS issue CVE-2012-0050
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8r and OpenSSL 0.9.8s [4 Jan 2012]:
 | 
			
		||||
 | 
			
		||||
      o Fix for DTLS plaintext recovery attack CVE-2011-4108
 | 
			
		||||
      o Fix policy check double free error CVE-2011-4109
 | 
			
		||||
      o Clear block padding bytes of SSL 3.0 records CVE-2011-4576
 | 
			
		||||
      o Only allow one SGC handshake restart for SSL/TLS CVE-2011-4619
 | 
			
		||||
      o Check for malformed RFC3779 data CVE-2011-4577
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8q and OpenSSL 0.9.8r [8 Feb 2011]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2011-0014
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8p and OpenSSL 0.9.8q [2 Dec 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-4180
 | 
			
		||||
      o Fix for CVE-2010-4252
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8o and OpenSSL 0.9.8p [16 Nov 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-3864.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8n and OpenSSL 0.9.8o [1 Jun 2010]:
 | 
			
		||||
 | 
			
		||||
      o Fix for security issue CVE-2010-0742.
 | 
			
		||||
      o Various DTLS fixes.
 | 
			
		||||
      o Recognise SHA2 certificates if only SSL algorithms added.
 | 
			
		||||
      o Fix for no-rc4 compilation.
 | 
			
		||||
      o Chil ENGINE unload workaround.
 | 
			
		||||
 | 
			
		||||
  Major changes between OpenSSL 0.9.8m and OpenSSL 0.9.8n [24 Mar 2010]:
 | 
			
		||||
 | 
			
		||||
      o CFB cipher definition fixes.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										204
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										204
									
								
								README
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
 | 
			
		||||
 OpenSSL 1.0.1m-dev
 | 
			
		||||
 OpenSSL 1.0.1q 3 Dec 2015
 | 
			
		||||
 | 
			
		||||
 Copyright (c) 1998-2011 The OpenSSL Project
 | 
			
		||||
 Copyright (c) 1998-2015 The OpenSSL Project
 | 
			
		||||
 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
 | 
			
		||||
 All rights reserved.
 | 
			
		||||
 | 
			
		||||
@@ -10,17 +10,17 @@
 | 
			
		||||
 | 
			
		||||
 The OpenSSL Project is a collaborative effort to develop a robust,
 | 
			
		||||
 commercial-grade, fully featured, and Open Source toolkit implementing the
 | 
			
		||||
 Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1)
 | 
			
		||||
 protocols as well as a full-strength general purpose cryptography library.
 | 
			
		||||
 The project is managed by a worldwide community of volunteers that use the
 | 
			
		||||
 Internet to communicate, plan, and develop the OpenSSL toolkit and its
 | 
			
		||||
 related documentation.
 | 
			
		||||
 Secure Sockets Layer (SSLv3) and Transport Layer Security (TLS) protocols as
 | 
			
		||||
 well as a full-strength general purpose cryptograpic library. The project is
 | 
			
		||||
 managed by a worldwide community of volunteers that use the Internet to
 | 
			
		||||
 communicate, plan, and develop the OpenSSL toolkit and its related
 | 
			
		||||
 documentation.
 | 
			
		||||
 | 
			
		||||
 OpenSSL is based on the excellent SSLeay library developed from Eric A. Young
 | 
			
		||||
 OpenSSL is descended from the SSLeay library developed by Eric A. Young
 | 
			
		||||
 and Tim J. Hudson.  The OpenSSL toolkit is licensed under a dual-license (the
 | 
			
		||||
 OpenSSL license plus the SSLeay license) situation, which basically means
 | 
			
		||||
 that you are free to get and use it for commercial and non-commercial
 | 
			
		||||
 purposes as long as you fulfill the conditions of both licenses.
 | 
			
		||||
 OpenSSL license plus the SSLeay license), which means that you are free to
 | 
			
		||||
 get and use it for commercial and non-commercial purposes as long as you
 | 
			
		||||
 fulfill the conditions of both licenses.
 | 
			
		||||
 | 
			
		||||
 OVERVIEW
 | 
			
		||||
 --------
 | 
			
		||||
@@ -28,116 +28,39 @@
 | 
			
		||||
 The OpenSSL toolkit includes:
 | 
			
		||||
 | 
			
		||||
 libssl.a:
 | 
			
		||||
     Implementation of SSLv2, SSLv3, TLSv1 and the required code to support
 | 
			
		||||
     both SSLv2, SSLv3 and TLSv1 in the one server and client.
 | 
			
		||||
     Provides the client and server-side implementations for SSLv3 and TLS.
 | 
			
		||||
 | 
			
		||||
 libcrypto.a:
 | 
			
		||||
     General encryption and X.509 v1/v3 stuff needed by SSL/TLS but not
 | 
			
		||||
     actually logically part of it. It includes routines for the following:
 | 
			
		||||
 | 
			
		||||
     Ciphers
 | 
			
		||||
        libdes - EAY's libdes DES encryption package which was floating
 | 
			
		||||
                 around the net for a few years, and was then relicensed by
 | 
			
		||||
                 him as part of SSLeay.  It includes 15 'modes/variations'
 | 
			
		||||
                 of DES (1, 2 and 3 key versions of ecb, cbc, cfb and ofb;
 | 
			
		||||
                 pcbc and a more general form of cfb and ofb) including desx
 | 
			
		||||
                 in cbc mode, a fast crypt(3), and routines to read
 | 
			
		||||
                 passwords from the keyboard.
 | 
			
		||||
        RC4 encryption,
 | 
			
		||||
        RC2 encryption      - 4 different modes, ecb, cbc, cfb and ofb.
 | 
			
		||||
        Blowfish encryption - 4 different modes, ecb, cbc, cfb and ofb.
 | 
			
		||||
        IDEA encryption     - 4 different modes, ecb, cbc, cfb and ofb.
 | 
			
		||||
 | 
			
		||||
     Digests
 | 
			
		||||
        MD5 and MD2 message digest algorithms, fast implementations,
 | 
			
		||||
        SHA (SHA-0) and SHA-1 message digest algorithms,
 | 
			
		||||
        MDC2 message digest. A DES based hash that is popular on smart cards.
 | 
			
		||||
 | 
			
		||||
     Public Key
 | 
			
		||||
        RSA encryption/decryption/generation.
 | 
			
		||||
            There is no limit on the number of bits.
 | 
			
		||||
        DSA encryption/decryption/generation.
 | 
			
		||||
            There is no limit on the number of bits.
 | 
			
		||||
        Diffie-Hellman key-exchange/key generation.
 | 
			
		||||
            There is no limit on the number of bits.
 | 
			
		||||
 | 
			
		||||
     X.509v3 certificates
 | 
			
		||||
        X509 encoding/decoding into/from binary ASN1 and a PEM
 | 
			
		||||
             based ASCII-binary encoding which supports encryption with a
 | 
			
		||||
             private key.  Program to generate RSA and DSA certificate
 | 
			
		||||
             requests and to generate RSA and DSA certificates.
 | 
			
		||||
 | 
			
		||||
     Systems
 | 
			
		||||
        The normal digital envelope routines and base64 encoding.  Higher
 | 
			
		||||
        level access to ciphers and digests by name.  New ciphers can be
 | 
			
		||||
        loaded at run time.  The BIO io system which is a simple non-blocking
 | 
			
		||||
        IO abstraction.  Current methods supported are file descriptors,
 | 
			
		||||
        sockets, socket accept, socket connect, memory buffer, buffering, SSL
 | 
			
		||||
        client/server, file pointer, encryption, digest, non-blocking testing
 | 
			
		||||
        and null.
 | 
			
		||||
 | 
			
		||||
     Data structures
 | 
			
		||||
        A dynamically growing hashing system
 | 
			
		||||
        A simple stack.
 | 
			
		||||
        A Configuration loader that uses a format similar to MS .ini files.
 | 
			
		||||
     Provides general cryptographic and X.509 support needed by SSL/TLS but
 | 
			
		||||
     not logically part of it.
 | 
			
		||||
 | 
			
		||||
 openssl:
 | 
			
		||||
     A command line tool that can be used for:
 | 
			
		||||
        Creation of RSA, DH and DSA key parameters
 | 
			
		||||
        Creation of key parameters
 | 
			
		||||
        Creation of X.509 certificates, CSRs and CRLs
 | 
			
		||||
        Calculation of Message Digests
 | 
			
		||||
        Encryption and Decryption with Ciphers
 | 
			
		||||
        SSL/TLS Client and Server Tests
 | 
			
		||||
        Calculation of message digests
 | 
			
		||||
        Encryption and decryption
 | 
			
		||||
        SSL/TLS client and server tests
 | 
			
		||||
        Handling of S/MIME signed or encrypted mail
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 PATENTS
 | 
			
		||||
 -------
 | 
			
		||||
 | 
			
		||||
 Various companies hold various patents for various algorithms in various
 | 
			
		||||
 locations around the world. _YOU_ are responsible for ensuring that your use
 | 
			
		||||
 of any algorithms is legal by checking if there are any patents in your
 | 
			
		||||
 country.  The file contains some of the patents that we know about or are
 | 
			
		||||
 rumored to exist. This is not a definitive list.
 | 
			
		||||
 | 
			
		||||
 RSA Security holds software patents on the RC5 algorithm.  If you
 | 
			
		||||
 intend to use this cipher, you must contact RSA Security for
 | 
			
		||||
 licensing conditions. Their web page is http://www.rsasecurity.com/.
 | 
			
		||||
 | 
			
		||||
 RC4 is a trademark of RSA Security, so use of this label should perhaps
 | 
			
		||||
 only be used with RSA Security's permission.
 | 
			
		||||
 | 
			
		||||
 The IDEA algorithm is patented by Ascom in Austria, France, Germany, Italy,
 | 
			
		||||
 Japan, the Netherlands, Spain, Sweden, Switzerland, UK and the USA.  They
 | 
			
		||||
 should be contacted if that algorithm is to be used; their web page is
 | 
			
		||||
 http://www.ascom.ch/.
 | 
			
		||||
 | 
			
		||||
 NTT and Mitsubishi have patents and pending patents on the Camellia
 | 
			
		||||
 algorithm, but allow use at no charge without requiring an explicit
 | 
			
		||||
 licensing agreement: http://info.isl.ntt.co.jp/crypt/eng/info/chiteki.html
 | 
			
		||||
        And more...
 | 
			
		||||
 | 
			
		||||
 INSTALLATION
 | 
			
		||||
 ------------
 | 
			
		||||
 | 
			
		||||
 To install this package under a Unix derivative, read the INSTALL file.  For
 | 
			
		||||
 a Win32 platform, read the INSTALL.W32 file.  For OpenVMS systems, read
 | 
			
		||||
 INSTALL.VMS.
 | 
			
		||||
 | 
			
		||||
 Read the documentation in the doc/ directory.  It is quite rough, but it
 | 
			
		||||
 lists the functions; you will probably have to look at the code to work out
 | 
			
		||||
 how to use them. Look at the example programs.
 | 
			
		||||
 | 
			
		||||
 PROBLEMS
 | 
			
		||||
 --------
 | 
			
		||||
 | 
			
		||||
 For some platforms, there are some known problems that may affect the user
 | 
			
		||||
 or application author.  We try to collect those in doc/PROBLEMS, with current
 | 
			
		||||
 thoughts on how they should be solved in a future of OpenSSL.
 | 
			
		||||
 See the appropriate file:
 | 
			
		||||
        INSTALL         Linux, Unix, etc.
 | 
			
		||||
        INSTALL.DJGPP   DOS platform with DJGPP
 | 
			
		||||
        INSTALL.NW      Netware
 | 
			
		||||
        INSTALL.OS2     OS/2
 | 
			
		||||
        INSTALL.VMS     VMS
 | 
			
		||||
        INSTALL.W32     Windows (32bit)
 | 
			
		||||
        INSTALL.W64     Windows (64bit)
 | 
			
		||||
        INSTALL.WCE     Windows CE
 | 
			
		||||
 | 
			
		||||
 SUPPORT
 | 
			
		||||
 -------
 | 
			
		||||
 | 
			
		||||
 See the OpenSSL website www.openssl.org for details of how to obtain
 | 
			
		||||
 See the OpenSSL website www.openssl.org for details on how to obtain
 | 
			
		||||
 commercial technical support.
 | 
			
		||||
 | 
			
		||||
 If you have any problems with OpenSSL then please take the following steps
 | 
			
		||||
@@ -161,58 +84,35 @@
 | 
			
		||||
    - Problem Description (steps that will reproduce the problem, if known)
 | 
			
		||||
    - Stack Traceback (if the application dumps core)
 | 
			
		||||
 | 
			
		||||
 Report the bug to the OpenSSL project via the Request Tracker
 | 
			
		||||
 (http://www.openssl.org/support/rt.html) by mail to:
 | 
			
		||||
 Email the report to:
 | 
			
		||||
 | 
			
		||||
    openssl-bugs@openssl.org
 | 
			
		||||
    rt@openssl.org
 | 
			
		||||
 | 
			
		||||
 Note that the request tracker should NOT be used for general assistance
 | 
			
		||||
 or support queries. Just because something doesn't work the way you expect
 | 
			
		||||
 does not mean it is necessarily a bug in OpenSSL.
 | 
			
		||||
 In order to avoid spam, this is a moderated mailing list, and it might
 | 
			
		||||
 take a day for the ticket to show up.  (We also scan posts to make sure
 | 
			
		||||
 that security disclosures aren't publically posted by mistake.) Mail to
 | 
			
		||||
 this address is recorded in the public RT (request tracker) database (see
 | 
			
		||||
 https://www.openssl.org/support/rt.html for details) and also forwarded
 | 
			
		||||
 the public openssl-dev mailing list.  Confidential mail may be sent to
 | 
			
		||||
 openssl-security@openssl.org (PGP key available from the key servers).
 | 
			
		||||
 | 
			
		||||
 Note that mail to openssl-bugs@openssl.org is recorded in the publicly
 | 
			
		||||
 readable request tracker database and is forwarded to a public
 | 
			
		||||
 mailing list. Confidential mail may be sent to openssl-security@openssl.org
 | 
			
		||||
 (PGP key available from the key servers).
 | 
			
		||||
 Please do NOT use this for general assistance or support queries.
 | 
			
		||||
 Just because something doesn't work the way you expect does not mean it
 | 
			
		||||
 is necessarily a bug in OpenSSL.
 | 
			
		||||
 | 
			
		||||
 You can also make GitHub pull requests. If you do this, please also send
 | 
			
		||||
 mail to rt@openssl.org with a link to the PR so that we can more easily
 | 
			
		||||
 keep track of it.
 | 
			
		||||
 | 
			
		||||
 HOW TO CONTRIBUTE TO OpenSSL
 | 
			
		||||
 ----------------------------
 | 
			
		||||
 | 
			
		||||
 Development is coordinated on the openssl-dev mailing list (see
 | 
			
		||||
 http://www.openssl.org for information on subscribing). If you
 | 
			
		||||
 would like to submit a patch, send it to openssl-bugs@openssl.org with
 | 
			
		||||
 the string "[PATCH]" in the subject. Please be sure to include a
 | 
			
		||||
 textual explanation of what your patch does.
 | 
			
		||||
 See CONTRIBUTING
 | 
			
		||||
 | 
			
		||||
 If you are unsure as to whether a feature will be useful for the general
 | 
			
		||||
 OpenSSL community please discuss it on the openssl-dev mailing list first.
 | 
			
		||||
 Someone may be already working on the same thing or there may be a good
 | 
			
		||||
 reason as to why that feature isn't implemented.
 | 
			
		||||
 | 
			
		||||
 Patches should be as up to date as possible, preferably relative to the
 | 
			
		||||
 current Git or the last snapshot. They should follow the coding style of
 | 
			
		||||
 OpenSSL and compile without warnings. Some of the core team developer targets
 | 
			
		||||
 can be used for testing purposes, (debug-steve64, debug-geoff etc). OpenSSL
 | 
			
		||||
 compiles on many varied platforms: try to ensure you only use portable
 | 
			
		||||
 features.
 | 
			
		||||
 | 
			
		||||
 Note: For legal reasons, contributions from the US can be accepted only
 | 
			
		||||
 if a TSU notification and a copy of the patch are sent to crypt@bis.doc.gov
 | 
			
		||||
 (formerly BXA) with a copy to the ENC Encryption Request Coordinator;
 | 
			
		||||
 please take some time to look at
 | 
			
		||||
    http://www.bis.doc.gov/Encryption/PubAvailEncSourceCodeNofify.html [sic]
 | 
			
		||||
 and
 | 
			
		||||
    http://w3.access.gpo.gov/bis/ear/pdf/740.pdf (EAR Section 740.13(e))
 | 
			
		||||
 for the details. If "your encryption source code is too large to serve as
 | 
			
		||||
 an email attachment", they are glad to receive it by fax instead; hope you
 | 
			
		||||
 have a cheap long-distance plan.
 | 
			
		||||
 | 
			
		||||
 Our preferred format for changes is "diff -u" output. You might
 | 
			
		||||
 generate it like this:
 | 
			
		||||
 | 
			
		||||
 # cd openssl-work
 | 
			
		||||
 # [your changes]
 | 
			
		||||
 # ./Configure dist; make clean
 | 
			
		||||
 # cd ..
 | 
			
		||||
 # diff -ur openssl-orig openssl-work > mydiffs.patch
 | 
			
		||||
 LEGALITIES
 | 
			
		||||
 ----------
 | 
			
		||||
 | 
			
		||||
 A number of nations, in particular the U.S., restrict the use or export
 | 
			
		||||
 of cryptography. If you are potentially subject to such restrictions
 | 
			
		||||
 you should seek competent professional legal advice before attempting to
 | 
			
		||||
 develop or distribute cryptographic code.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										108
									
								
								TABLE
									
									
									
									
									
								
							
							
						
						
									
										108
									
								
								TABLE
									
									
									
									
									
								
							@@ -35,7 +35,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** BS2000-OSD
 | 
			
		||||
$cc           = c89
 | 
			
		||||
$cflags       = -O -XLLML -XLLMK -XL -DB_ENDIAN -DTERMIOS -DCHARSET_EBCDIC
 | 
			
		||||
$cflags       = -O -XLLML -XLLMK -XL -DB_ENDIAN -DCHARSET_EBCDIC
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = (unknown)
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -68,7 +68,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** BSD-generic32
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DTERMIOS -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$cflags       = -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -pthread -D_THREAD_SAFE -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -101,7 +101,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** BSD-generic64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DTERMIOS -O3 -Wall
 | 
			
		||||
$cflags       = -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -pthread -D_THREAD_SAFE -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -134,7 +134,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** BSD-ia64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIOS -O3 -Wall
 | 
			
		||||
$cflags       = -DL_ENDIAN -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -pthread -D_THREAD_SAFE -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -167,7 +167,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** BSD-sparc64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DB_ENDIAN -DTERMIOS -O3 -DMD32_REG_T=int -Wall
 | 
			
		||||
$cflags       = -DB_ENDIAN -O3 -DMD32_REG_T=int -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -pthread -D_THREAD_SAFE -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -200,7 +200,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** BSD-sparcv8
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DB_ENDIAN -DTERMIOS -O3 -mv8 -Wall
 | 
			
		||||
$cflags       = -DB_ENDIAN -O3 -mcpu=v8 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -pthread -D_THREAD_SAFE -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -233,7 +233,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** BSD-x86
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$cflags       = -DL_ENDIAN -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -pthread -D_THREAD_SAFE -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -266,7 +266,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** BSD-x86-elf
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$cflags       = -DL_ENDIAN -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -pthread -D_THREAD_SAFE -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -299,7 +299,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** BSD-x86_64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIOS -O3 -Wall
 | 
			
		||||
$cflags       = -DL_ENDIAN -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -pthread -D_THREAD_SAFE -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -398,7 +398,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** DJGPP
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -I/dev/env/WATT_ROOT/inc -DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O2 -Wall
 | 
			
		||||
$cflags       = -I/dev/env/WATT_ROOT/inc -DTERMIO -DL_ENDIAN -fomit-frame-pointer -O2 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = 
 | 
			
		||||
$sys_id       = MSDOS
 | 
			
		||||
@@ -530,7 +530,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** QNX6
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DTERMIOS
 | 
			
		||||
$cflags       = 
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = 
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -563,7 +563,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** QNX6-i386
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIOS -O2 -Wall
 | 
			
		||||
$cflags       = -DL_ENDIAN -O2 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = 
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -1520,7 +1520,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-BSD-x86-elf
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIOS -O3 -Wall -g
 | 
			
		||||
$cflags       = -DL_ENDIAN -O3 -Wall -g
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -pthread -D_THREAD_SAFE -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2213,7 +2213,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-levitte-linux-elf-extreme
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2279,7 +2279,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-levitte-linux-noasm-extreme
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2312,7 +2312,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-linux-elf
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -march=i486 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2345,7 +2345,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-linux-elf-noefence
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -march=i486 -Wall
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -march=i486 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2378,7 +2378,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-linux-generic32
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO -g -Wall
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -g -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2411,7 +2411,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-linux-generic64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO -g -Wall
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -g -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2444,7 +2444,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-linux-ia32-aes
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DAES_EXPERIMENTAL -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$cflags       = -DAES_EXPERIMENTAL -DL_ENDIAN -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2477,7 +2477,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-linux-pentium
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentium -Wall
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -mcpu=pentium -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2510,7 +2510,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-linux-ppro
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -DTERMIO -g -mcpu=pentiumpro -Wall
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -mcpu=pentiumpro -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2543,7 +2543,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-linux-x86_64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -DTERMIO -g -Wall
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -g -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2642,7 +2642,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** debug-solaris-sparcv8-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mv8 -Wall -DB_ENDIAN
 | 
			
		||||
$cflags       = -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG_ALL -O -g -mcpu=v8 -Wall -DB_ENDIAN
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3566,7 +3566,7 @@ $multilib     = /pa20_64
 | 
			
		||||
 | 
			
		||||
*** hurd-x86
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -march=i486 -Wall
 | 
			
		||||
$cflags       = -DL_ENDIAN -O3 -fomit-frame-pointer -march=i486 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3632,7 +3632,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** irix-cc
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN
 | 
			
		||||
$cflags       = -O2 -use_readonly_const -DB_ENDIAN
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = (unknown)
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3665,7 +3665,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** irix-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -O3 -DTERMIOS -DB_ENDIAN
 | 
			
		||||
$cflags       = -O3 -DB_ENDIAN
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = (unknown)
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3698,7 +3698,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** irix-mips3-cc
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -n32 -mips3 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$cflags       = -n32 -mips3 -O2 -use_readonly_const -G0 -rdata_shared -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_SGI_MP_SOURCE
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3731,7 +3731,7 @@ $multilib     = 32
 | 
			
		||||
 | 
			
		||||
*** irix-mips3-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -mabi=n32 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$cflags       = -mabi=n32 -O3 -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_SGI_MP_SOURCE
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3764,7 +3764,7 @@ $multilib     = 32
 | 
			
		||||
 | 
			
		||||
*** irix64-mips4-cc
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -64 -mips4 -O2 -use_readonly_const -G0 -rdata_shared -DTERMIOS -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$cflags       = -64 -mips4 -O2 -use_readonly_const -G0 -rdata_shared -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_SGI_MP_SOURCE
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3797,7 +3797,7 @@ $multilib     = 64
 | 
			
		||||
 | 
			
		||||
*** irix64-mips4-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -mabi=64 -mips4 -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$cflags       = -mabi=64 -mips4 -O3 -DB_ENDIAN -DBN_DIV3W
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_SGI_MP_SOURCE
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3830,7 +3830,7 @@ $multilib     = 64
 | 
			
		||||
 | 
			
		||||
*** linux-alpha+bwx-ccc
 | 
			
		||||
$cc           = ccc
 | 
			
		||||
$cflags       = -fast -readonly_strings -DL_ENDIAN -DTERMIO
 | 
			
		||||
$cflags       = -fast -readonly_strings -DL_ENDIAN
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3863,7 +3863,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-alpha+bwx-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -O3 -DL_ENDIAN -DTERMIO
 | 
			
		||||
$cflags       = -O3 -DL_ENDIAN
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3896,7 +3896,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-alpha-ccc
 | 
			
		||||
$cc           = ccc
 | 
			
		||||
$cflags       = -fast -readonly_strings -DL_ENDIAN -DTERMIO
 | 
			
		||||
$cflags       = -fast -readonly_strings -DL_ENDIAN
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3929,7 +3929,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-alpha-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -O3 -DL_ENDIAN -DTERMIO
 | 
			
		||||
$cflags       = -O3 -DL_ENDIAN
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3962,7 +3962,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-aout
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -march=i486 -Wall
 | 
			
		||||
$cflags       = -DL_ENDIAN -O3 -fomit-frame-pointer -march=i486 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = (unknown)
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -3995,7 +3995,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-armv4
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DTERMIO -O3 -Wall
 | 
			
		||||
$cflags       = -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4028,7 +4028,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-elf
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$cflags       = -DL_ENDIAN -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4061,7 +4061,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-generic32
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DTERMIO -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$cflags       = -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4094,7 +4094,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-generic64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DTERMIO -O3 -Wall
 | 
			
		||||
$cflags       = -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4127,7 +4127,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-ia32-icc
 | 
			
		||||
$cc           = icc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIO -O2 -no_cpprt
 | 
			
		||||
$cflags       = -DL_ENDIAN -O2 -no_cpprt
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4160,7 +4160,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-ia64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIO -O3 -Wall
 | 
			
		||||
$cflags       = -DL_ENDIAN -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4193,7 +4193,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-ia64-ecc
 | 
			
		||||
$cc           = ecc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt
 | 
			
		||||
$cflags       = -DL_ENDIAN -O2 -Wall -no_cpprt
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4226,7 +4226,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-ia64-icc
 | 
			
		||||
$cc           = icc
 | 
			
		||||
$cflags       = -DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt
 | 
			
		||||
$cflags       = -DL_ENDIAN -O2 -Wall -no_cpprt
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4259,7 +4259,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-ppc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DB_ENDIAN -DTERMIO -O3 -Wall
 | 
			
		||||
$cflags       = -DB_ENDIAN -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4292,7 +4292,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-ppc64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -m64 -DB_ENDIAN -DTERMIO -O3 -Wall
 | 
			
		||||
$cflags       = -m64 -DB_ENDIAN -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4325,7 +4325,7 @@ $multilib     = 64
 | 
			
		||||
 | 
			
		||||
*** linux-sparcv8
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W
 | 
			
		||||
$cflags       = -mcpu=v8 -DB_ENDIAN -O3 -fomit-frame-pointer -Wall -DBN_DIV2W
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4358,7 +4358,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-sparcv9
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -m32 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W
 | 
			
		||||
$cflags       = -m32 -mcpu=ultrasparc -DB_ENDIAN -O3 -fomit-frame-pointer -Wall -Wa,-Av8plus -DBN_DIV2W
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = ULTRASPARC
 | 
			
		||||
@@ -4391,7 +4391,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** linux-x86_64
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -m64 -DL_ENDIAN -DTERMIO -O3 -Wall
 | 
			
		||||
$cflags       = -m64 -DL_ENDIAN -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4424,7 +4424,7 @@ $multilib     = 64
 | 
			
		||||
 | 
			
		||||
*** linux32-s390x
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -m31 -Wa,-mzarch -DB_ENDIAN -DTERMIO -O3 -Wall
 | 
			
		||||
$cflags       = -m31 -Wa,-mzarch -DB_ENDIAN -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4457,7 +4457,7 @@ $multilib     = /highgprs
 | 
			
		||||
 | 
			
		||||
*** linux64-s390x
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -m64 -DB_ENDIAN -DTERMIO -O3 -Wall
 | 
			
		||||
$cflags       = -m64 -DB_ENDIAN -O3 -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -4490,7 +4490,7 @@ $multilib     = 64
 | 
			
		||||
 | 
			
		||||
*** linux64-sparcv9
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -m64 -mcpu=ultrasparc -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$cflags       = -m64 -mcpu=ultrasparc -DB_ENDIAN -O3 -fomit-frame-pointer -Wall
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = ULTRASPARC
 | 
			
		||||
@@ -5315,7 +5315,7 @@ $multilib     =
 | 
			
		||||
 | 
			
		||||
*** solaris-sparcv8-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W
 | 
			
		||||
$cflags       = -mcpu=v8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -5612,7 +5612,7 @@ $multilib     = /64
 | 
			
		||||
 | 
			
		||||
*** sunos-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -O3 -mv8 -Dssize_t=int
 | 
			
		||||
$cflags       = -O3 -mcpu=v8 -Dssize_t=int
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = (unknown)
 | 
			
		||||
$sys_id       = SUNOS
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
openssl
 | 
			
		||||
Makefile.save
 | 
			
		||||
der_chop
 | 
			
		||||
der_chop.bak
 | 
			
		||||
CA.pl
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
*.dll
 | 
			
		||||
@@ -94,6 +94,9 @@ req: sreq.o $(A_OBJ) $(DLIBCRYPTO)
 | 
			
		||||
sreq.o: req.c 
 | 
			
		||||
	$(CC) -c $(INCLUDES) $(CFLAG) -o sreq.o req.c
 | 
			
		||||
 | 
			
		||||
openssl-vms.cnf: openssl.cnf
 | 
			
		||||
	$(PERL) $(TOP)/VMS/VMSify-conf.pl < openssl.cnf > openssl-vms.cnf
 | 
			
		||||
 | 
			
		||||
files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
 | 
			
		||||
 | 
			
		||||
@@ -127,12 +130,12 @@ links:
 | 
			
		||||
lint:
 | 
			
		||||
	lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then \
 | 
			
		||||
	    $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; \
 | 
			
		||||
	else \
 | 
			
		||||
	    $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC); \
 | 
			
		||||
	fi
 | 
			
		||||
update: openssl-vms.cnf local_depend
 | 
			
		||||
 | 
			
		||||
depend: local_depend
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
 | 
			
		||||
local_depend:
 | 
			
		||||
	@[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC)
 | 
			
		||||
 | 
			
		||||
dclean:
 | 
			
		||||
	$(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new
 | 
			
		||||
@@ -144,10 +147,10 @@ clean:
 | 
			
		||||
	rm -f req
 | 
			
		||||
 | 
			
		||||
$(DLIBSSL):
 | 
			
		||||
	(cd ..; $(MAKE) DIRS=ssl all)
 | 
			
		||||
	(cd ..; $(MAKE) build_libssl)
 | 
			
		||||
 | 
			
		||||
$(DLIBCRYPTO):
 | 
			
		||||
	(cd ..; $(MAKE) DIRS=crypto all)
 | 
			
		||||
	(cd ..; $(MAKE) build_libcrypto)
 | 
			
		||||
 | 
			
		||||
$(EXE): progs.h $(E_OBJ) $(PROGRAM).o $(DLIBCRYPTO) $(DLIBSSL)
 | 
			
		||||
	$(RM) $(EXE)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								apps/apps.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								apps/apps.c
									
									
									
									
									
								
							@@ -119,9 +119,6 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(NETWARE_CLIB)
 | 
			
		||||
# include <strings.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
@@ -572,6 +569,11 @@ int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp)
 | 
			
		||||
        char *prompt = NULL;
 | 
			
		||||
 | 
			
		||||
        prompt = UI_construct_prompt(ui, "pass phrase", prompt_info);
 | 
			
		||||
        if (!prompt) {
 | 
			
		||||
            BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
            UI_free(ui);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ui_flags |= UI_INPUT_FLAG_DEFAULT_PWD;
 | 
			
		||||
        UI_ctrl(ui, UI_CTRL_PRINT_ERRORS, 1, 0, 0);
 | 
			
		||||
@@ -581,6 +583,12 @@ int password_callback(char *buf, int bufsiz, int verify, PW_CB_DATA *cb_tmp)
 | 
			
		||||
                                     PW_MIN_LENGTH, bufsiz - 1);
 | 
			
		||||
        if (ok >= 0 && verify) {
 | 
			
		||||
            buff = (char *)OPENSSL_malloc(bufsiz);
 | 
			
		||||
            if (!buff) {
 | 
			
		||||
                BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
                UI_free(ui);
 | 
			
		||||
                OPENSSL_free(prompt);
 | 
			
		||||
                return 0;
 | 
			
		||||
            }
 | 
			
		||||
            ok = UI_add_verify_string(ui, prompt, ui_flags, buff,
 | 
			
		||||
                                      PW_MIN_LENGTH, bufsiz - 1, buf);
 | 
			
		||||
        }
 | 
			
		||||
@@ -1236,7 +1244,11 @@ int set_name_ex(unsigned long *flags, const char *arg)
 | 
			
		||||
        {"ca_default", XN_FLAG_MULTILINE, 0xffffffffL},
 | 
			
		||||
        {NULL, 0, 0}
 | 
			
		||||
    };
 | 
			
		||||
    return set_multi_opts(flags, arg, ex_tbl);
 | 
			
		||||
    if (set_multi_opts(flags, arg, ex_tbl) == 0)
 | 
			
		||||
        return 0;
 | 
			
		||||
    if ((*flags & XN_FLAG_SEP_MASK) == 0)
 | 
			
		||||
        *flags |= XN_FLAG_SEP_CPLUS_SPC;
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int set_ext_copy(int *copy_type, const char *arg)
 | 
			
		||||
@@ -2227,6 +2239,8 @@ int args_verify(char ***pargs, int *pargc,
 | 
			
		||||
        flags |= X509_V_FLAG_NOTIFY_POLICY;
 | 
			
		||||
    else if (!strcmp(arg, "-check_ss_sig"))
 | 
			
		||||
        flags |= X509_V_FLAG_CHECK_SS_SIGNATURE;
 | 
			
		||||
    else if (!strcmp(arg, "-no_alt_chains"))
 | 
			
		||||
        flags |= X509_V_FLAG_NO_ALT_CHAINS;
 | 
			
		||||
    else
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -313,9 +313,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            }
 | 
			
		||||
            typ = ASN1_TYPE_get(at);
 | 
			
		||||
            if ((typ == V_ASN1_OBJECT)
 | 
			
		||||
                || (typ == V_ASN1_BOOLEAN)
 | 
			
		||||
                || (typ == V_ASN1_NULL)) {
 | 
			
		||||
                BIO_printf(bio_err, "Can't parse %s type\n",
 | 
			
		||||
                           typ == V_ASN1_NULL ? "NULL" : "OBJECT");
 | 
			
		||||
                BIO_printf(bio_err, "Can't parse %s type\n", ASN1_tag2str(typ));
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
@@ -375,7 +375,7 @@ static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
 | 
			
		||||
{
 | 
			
		||||
    CONF *cnf = NULL;
 | 
			
		||||
    int len;
 | 
			
		||||
    long errline;
 | 
			
		||||
    long errline = 0;
 | 
			
		||||
    unsigned char *p;
 | 
			
		||||
    ASN1_TYPE *atyp = NULL;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								apps/ca.c
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								apps/ca.c
									
									
									
									
									
								
							@@ -99,25 +99,19 @@
 | 
			
		||||
#undef PROG
 | 
			
		||||
#define PROG ca_main
 | 
			
		||||
 | 
			
		||||
#define BASE_SECTION    "ca"
 | 
			
		||||
#define CONFIG_FILE "openssl.cnf"
 | 
			
		||||
#define BASE_SECTION            "ca"
 | 
			
		||||
#define CONFIG_FILE             "openssl.cnf"
 | 
			
		||||
 | 
			
		||||
#define ENV_DEFAULT_CA          "default_ca"
 | 
			
		||||
 | 
			
		||||
#define STRING_MASK     "string_mask"
 | 
			
		||||
#define STRING_MASK             "string_mask"
 | 
			
		||||
#define UTF8_IN                 "utf8"
 | 
			
		||||
 | 
			
		||||
#define ENV_DIR                 "dir"
 | 
			
		||||
#define ENV_CERTS               "certs"
 | 
			
		||||
#define ENV_CRL_DIR             "crl_dir"
 | 
			
		||||
#define ENV_CA_DB               "CA_DB"
 | 
			
		||||
#define ENV_NEW_CERTS_DIR       "new_certs_dir"
 | 
			
		||||
#define ENV_CERTIFICATE         "certificate"
 | 
			
		||||
#define ENV_SERIAL              "serial"
 | 
			
		||||
#define ENV_CRLNUMBER           "crlnumber"
 | 
			
		||||
#define ENV_CRL                 "crl"
 | 
			
		||||
#define ENV_PRIVATE_KEY         "private_key"
 | 
			
		||||
#define ENV_RANDFILE            "RANDFILE"
 | 
			
		||||
#define ENV_DEFAULT_DAYS        "default_days"
 | 
			
		||||
#define ENV_DEFAULT_STARTDATE   "default_startdate"
 | 
			
		||||
#define ENV_DEFAULT_ENDDATE     "default_enddate"
 | 
			
		||||
@@ -558,10 +552,18 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
#ifdef OPENSSL_SYS_VMS
 | 
			
		||||
        len = strlen(s) + sizeof(CONFIG_FILE);
 | 
			
		||||
        tofree = OPENSSL_malloc(len);
 | 
			
		||||
        if (!tofree) {
 | 
			
		||||
            BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
        strcpy(tofree, s);
 | 
			
		||||
#else
 | 
			
		||||
        len = strlen(s) + sizeof(CONFIG_FILE) + 1;
 | 
			
		||||
        tofree = OPENSSL_malloc(len);
 | 
			
		||||
        if (!tofree) {
 | 
			
		||||
            BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
        BUF_strlcpy(tofree, s, len);
 | 
			
		||||
        BUF_strlcat(tofree, "/", len);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -2512,6 +2514,8 @@ static int do_updatedb(CA_DB *db)
 | 
			
		||||
    char **rrow, *a_tm_s;
 | 
			
		||||
 | 
			
		||||
    a_tm = ASN1_UTCTIME_new();
 | 
			
		||||
    if (a_tm == NULL)
 | 
			
		||||
        return -1;
 | 
			
		||||
 | 
			
		||||
    /* get actual time and make a string */
 | 
			
		||||
    a_tm = X509_gmtime_adj(a_tm, 0);
 | 
			
		||||
@@ -2795,6 +2799,11 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
 | 
			
		||||
    ASN1_GENERALIZEDTIME *comp_time = NULL;
 | 
			
		||||
    tmp = BUF_strdup(str);
 | 
			
		||||
 | 
			
		||||
    if (!tmp) {
 | 
			
		||||
        BIO_printf(bio_err, "memory allocation failure\n");
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    p = strchr(tmp, ',');
 | 
			
		||||
 | 
			
		||||
    rtime_str = tmp;
 | 
			
		||||
@@ -2812,6 +2821,10 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
 | 
			
		||||
 | 
			
		||||
    if (prevtm) {
 | 
			
		||||
        *prevtm = ASN1_UTCTIME_new();
 | 
			
		||||
        if (!*prevtm) {
 | 
			
		||||
            BIO_printf(bio_err, "memory allocation failure\n");
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
        if (!ASN1_UTCTIME_set_string(*prevtm, rtime_str)) {
 | 
			
		||||
            BIO_printf(bio_err, "invalid revocation date %s\n", rtime_str);
 | 
			
		||||
            goto err;
 | 
			
		||||
@@ -2852,6 +2865,10 @@ int unpack_revinfo(ASN1_TIME **prevtm, int *preason, ASN1_OBJECT **phold,
 | 
			
		||||
                goto err;
 | 
			
		||||
            }
 | 
			
		||||
            comp_time = ASN1_GENERALIZEDTIME_new();
 | 
			
		||||
            if (!comp_time) {
 | 
			
		||||
                BIO_printf(bio_err, "memory allocation failure\n");
 | 
			
		||||
                goto err;
 | 
			
		||||
            }
 | 
			
		||||
            if (!ASN1_GENERALIZEDTIME_set_string(comp_time, arg_str)) {
 | 
			
		||||
                BIO_printf(bio_err, "invalid compromised time %s\n", arg_str);
 | 
			
		||||
                goto err;
 | 
			
		||||
 
 | 
			
		||||
@@ -580,6 +580,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-CApath dir    trusted certificates directory\n");
 | 
			
		||||
        BIO_printf(bio_err, "-CAfile file   trusted certificates file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-no_alt_chains only ever use the first certificate chain found\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-crl_check     check revocation status of signer's certificate using CRLs\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								apps/dgst.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								apps/dgst.c
									
									
									
									
									
								
							@@ -287,6 +287,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
    in = BIO_new(BIO_s_file());
 | 
			
		||||
    bmd = BIO_new(BIO_f_md());
 | 
			
		||||
    if ((in == NULL) || (bmd == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (debug) {
 | 
			
		||||
        BIO_set_callback(in, BIO_debug_callback);
 | 
			
		||||
        /* needed for windows 3.1 */
 | 
			
		||||
@@ -298,11 +303,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((in == NULL) || (bmd == NULL)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (out_bin == -1) {
 | 
			
		||||
        if (keyfile)
 | 
			
		||||
            out_bin = 1;
 | 
			
		||||
@@ -448,6 +448,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if (!sigbuf) {
 | 
			
		||||
            BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        siglen = BIO_read(sigbio, sigbuf, siglen);
 | 
			
		||||
        BIO_free(sigbio);
 | 
			
		||||
        if (siglen <= 0) {
 | 
			
		||||
 
 | 
			
		||||
@@ -130,7 +130,7 @@
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG    dhparam_main
 | 
			
		||||
 | 
			
		||||
# define DEFBITS 512
 | 
			
		||||
# define DEFBITS 2048
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * -inform arg  - input format - default PEM (DER or PEM)
 | 
			
		||||
@@ -254,7 +254,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -5            generate parameters using  5 as the generator value\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " numbits       number of bits in to generate (default 512)\n");
 | 
			
		||||
                   " numbits       number of bits in to generate (default 2048)\n");
 | 
			
		||||
# ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   " -engine e     use engine e, possibly a hardware device.\n");
 | 
			
		||||
 
 | 
			
		||||
@@ -413,14 +413,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (check) {
 | 
			
		||||
        if (group == NULL)
 | 
			
		||||
            BIO_printf(bio_err, "no elliptic curve parameters\n");
 | 
			
		||||
        BIO_printf(bio_err, "checking elliptic curve parameters: ");
 | 
			
		||||
        if (!EC_GROUP_check(group, NULL)) {
 | 
			
		||||
            BIO_printf(bio_err, "failed\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
        } else
 | 
			
		||||
            BIO_printf(bio_err, "ok\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        BIO_printf(bio_err, "ok\n");
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								apps/enc.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								apps/enc.c
									
									
									
									
									
								
							@@ -548,9 +548,14 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            else
 | 
			
		||||
                OPENSSL_cleanse(str, strlen(str));
 | 
			
		||||
        }
 | 
			
		||||
        if ((hiv != NULL) && !set_hex(hiv, iv, sizeof iv)) {
 | 
			
		||||
            BIO_printf(bio_err, "invalid hex iv value\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        if (hiv != NULL) {
 | 
			
		||||
            int siz = EVP_CIPHER_iv_length(cipher);
 | 
			
		||||
            if (siz == 0) {
 | 
			
		||||
                BIO_printf(bio_err, "warning: iv not use by this cipher\n");
 | 
			
		||||
            } else if (!set_hex(hiv, iv, sizeof iv)) {
 | 
			
		||||
                BIO_printf(bio_err, "invalid hex iv value\n");
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if ((hiv == NULL) && (str == NULL)
 | 
			
		||||
            && EVP_CIPHER_iv_length(cipher) != 0) {
 | 
			
		||||
@@ -562,7 +567,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
            BIO_printf(bio_err, "iv undefined\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
        if ((hkey != NULL) && !set_hex(hkey, key, sizeof key)) {
 | 
			
		||||
        if ((hkey != NULL) && !set_hex(hkey, key, EVP_CIPHER_key_length(cipher))) {
 | 
			
		||||
            BIO_printf(bio_err, "invalid hex key value\n");
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -99,8 +99,6 @@ static void identity(char *ptr)
 | 
			
		||||
 | 
			
		||||
static int append_buf(char **buf, const char *s, int *size, int step)
 | 
			
		||||
{
 | 
			
		||||
    int l = strlen(s);
 | 
			
		||||
 | 
			
		||||
    if (*buf == NULL) {
 | 
			
		||||
        *size = step;
 | 
			
		||||
        *buf = OPENSSL_malloc(*size);
 | 
			
		||||
@@ -109,9 +107,6 @@ static int append_buf(char **buf, const char *s, int *size, int step)
 | 
			
		||||
        **buf = '\0';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (**buf != '\0')
 | 
			
		||||
        l += 2;                 /* ", " */
 | 
			
		||||
 | 
			
		||||
    if (strlen(*buf) + strlen(s) >= (unsigned int)*size) {
 | 
			
		||||
        *size += step;
 | 
			
		||||
        *buf = OPENSSL_realloc(*buf, *size);
 | 
			
		||||
 
 | 
			
		||||
@@ -80,7 +80,7 @@
 | 
			
		||||
# include <openssl/x509.h>
 | 
			
		||||
# include <openssl/pem.h>
 | 
			
		||||
 | 
			
		||||
# define DEFBITS 512
 | 
			
		||||
# define DEFBITS 2048
 | 
			
		||||
# undef PROG
 | 
			
		||||
# define PROG gendh_main
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -518,6 +518,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
                   "-CApath dir          trusted certificates directory\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-CAfile file         trusted certificates file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-no_alt_chains       only ever use the first certificate chain found\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-VAfile file         validator certificates file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
@@ -1218,8 +1220,8 @@ static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path,
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (BIO_get_fd(cbio, &fd) <= 0) {
 | 
			
		||||
        BIO_puts(err, "Can't get connection fd\n");
 | 
			
		||||
    if (BIO_get_fd(cbio, &fd) < 0) {
 | 
			
		||||
        BIO_puts(bio_err, "Can't get connection fd\n");
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -428,10 +428,6 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
    if (arg.data != NULL)
 | 
			
		||||
        OPENSSL_free(arg.data);
 | 
			
		||||
 | 
			
		||||
    if (bio_err != NULL) {
 | 
			
		||||
        BIO_free(bio_err);
 | 
			
		||||
        bio_err = NULL;
 | 
			
		||||
    }
 | 
			
		||||
#if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64)
 | 
			
		||||
    /* Free any duplicate Argv[] storage. */
 | 
			
		||||
    if (free_Argv) {
 | 
			
		||||
@@ -440,6 +436,10 @@ int main(int Argc, char *ARGV[])
 | 
			
		||||
#endif
 | 
			
		||||
    apps_shutdown();
 | 
			
		||||
    CRYPTO_mem_leaks(bio_err);
 | 
			
		||||
    if (bio_err != NULL) {
 | 
			
		||||
        BIO_free(bio_err);
 | 
			
		||||
        bio_err = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -134,13 +134,6 @@ 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);
 | 
			
		||||
@@ -148,6 +141,13 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    if (!load_config(bio_err, NULL))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
# ifdef OPENSSL_FIPS
 | 
			
		||||
    if (FIPS_mode())
 | 
			
		||||
        cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC;
 | 
			
		||||
    else
 | 
			
		||||
# endif
 | 
			
		||||
        cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC;
 | 
			
		||||
 | 
			
		||||
    args = argv + 1;
 | 
			
		||||
 | 
			
		||||
    while (*args) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								apps/pkcs7.c
									
									
									
									
									
								
							@@ -189,11 +189,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    if (infile == NULL)
 | 
			
		||||
        BIO_set_fp(in, stdin, BIO_NOCLOSE);
 | 
			
		||||
    else {
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0)
 | 
			
		||||
            if (in == NULL) {
 | 
			
		||||
                perror(infile);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        if (BIO_read_filename(in, infile) <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "unable to load input file\n");
 | 
			
		||||
            ERR_print_errors(bio_err);
 | 
			
		||||
            goto end;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (informat == FORMAT_ASN1)
 | 
			
		||||
 
 | 
			
		||||
@@ -268,6 +268,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
    rsa_in = OPENSSL_malloc(keysize * 2);
 | 
			
		||||
    rsa_out = OPENSSL_malloc(keysize);
 | 
			
		||||
    if (!rsa_in || !rsa_out) {
 | 
			
		||||
        BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        goto end;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Read the input data */
 | 
			
		||||
    rsa_inlen = BIO_read(in, rsa_in, keysize * 2);
 | 
			
		||||
 
 | 
			
		||||
@@ -111,6 +111,7 @@
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h> /* for memcpy() */
 | 
			
		||||
#define USE_SOCKETS
 | 
			
		||||
#define NON_MAIN
 | 
			
		||||
#include "apps.h"
 | 
			
		||||
@@ -747,7 +748,7 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie,
 | 
			
		||||
 | 
			
		||||
    /* Initialize a random secret */
 | 
			
		||||
    if (!cookie_initialized) {
 | 
			
		||||
        if (!RAND_bytes(cookie_secret, COOKIE_SECRET_LENGTH)) {
 | 
			
		||||
        if (RAND_bytes(cookie_secret, COOKIE_SECRET_LENGTH) <= 0) {
 | 
			
		||||
            BIO_printf(bio_err, "error setting random cookie secret\n");
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -322,6 +322,8 @@ static void sc_usage(void)
 | 
			
		||||
               " -pass arg     - private key file pass phrase source\n");
 | 
			
		||||
    BIO_printf(bio_err, " -CApath arg   - PEM format directory of CA's\n");
 | 
			
		||||
    BIO_printf(bio_err, " -CAfile arg   - PEM format file of CA's\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               " -no_alt_chains - only ever use the first certificate chain found\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               " -reconnect    - Drop and re-make the connection with the same Session-ID\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
@@ -547,6 +549,11 @@ static char *MS_CALLBACK ssl_give_srp_client_pwd_cb(SSL *s, void *arg)
 | 
			
		||||
    PW_CB_DATA cb_tmp;
 | 
			
		||||
    int l;
 | 
			
		||||
 | 
			
		||||
    if (!pass) {
 | 
			
		||||
        BIO_printf(bio_err, "Malloc failure\n");
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    cb_tmp.password = (char *)srp_arg->srppassin;
 | 
			
		||||
    cb_tmp.prompt_info = "SRP user";
 | 
			
		||||
    if ((l = password_callback(pass, PWD_STRLEN, 0, &cb_tmp)) < 0) {
 | 
			
		||||
@@ -1149,12 +1156,6 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
    if (clr)
 | 
			
		||||
        SSL_CTX_clear_options(ctx, clr);
 | 
			
		||||
    /*
 | 
			
		||||
     * DTLS: partial reads end up discarding unread UDP bytes :-( Setting
 | 
			
		||||
     * read ahead solves this problem.
 | 
			
		||||
     */
 | 
			
		||||
    if (socket_type == SOCK_DGRAM)
 | 
			
		||||
        SSL_CTX_set_read_ahead(ctx, 1);
 | 
			
		||||
 | 
			
		||||
#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
 | 
			
		||||
    if (next_proto.data)
 | 
			
		||||
@@ -1178,13 +1179,12 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    if (!set_cert_key_stuff(ctx, cert, key))
 | 
			
		||||
        goto end;
 | 
			
		||||
 | 
			
		||||
    if ((!SSL_CTX_load_verify_locations(ctx, CAfile, CApath)) ||
 | 
			
		||||
        (!SSL_CTX_set_default_verify_paths(ctx))) {
 | 
			
		||||
        /*
 | 
			
		||||
         * BIO_printf(bio_err,"error setting default verify locations\n");
 | 
			
		||||
         */
 | 
			
		||||
    if ((CAfile || CApath)
 | 
			
		||||
        && !SSL_CTX_load_verify_locations(ctx, CAfile, CApath)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
    }
 | 
			
		||||
    if (!SSL_CTX_set_default_verify_paths(ctx)) {
 | 
			
		||||
        ERR_print_errors(bio_err);
 | 
			
		||||
        /* goto end; */
 | 
			
		||||
    }
 | 
			
		||||
#ifndef OPENSSL_NO_TLSEXT
 | 
			
		||||
    if (servername != NULL) {
 | 
			
		||||
@@ -1884,6 +1884,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        EVP_PKEY_free(key);
 | 
			
		||||
    if (pass)
 | 
			
		||||
        OPENSSL_free(pass);
 | 
			
		||||
#ifndef OPENSSL_NO_SRP
 | 
			
		||||
    OPENSSL_free(srp_arg.srppassin);
 | 
			
		||||
#endif
 | 
			
		||||
    if (vpm)
 | 
			
		||||
        X509_VERIFY_PARAM_free(vpm);
 | 
			
		||||
    if (cbuf != NULL) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										116
									
								
								apps/s_server.c
									
									
									
									
									
								
							
							
						
						
									
										116
									
								
								apps/s_server.c
									
									
									
									
									
								
							@@ -219,7 +219,7 @@ static int generate_session_id(const SSL *ssl, unsigned char *id,
 | 
			
		||||
                               unsigned int *id_len);
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
static DH *load_dh_param(const char *dhfile);
 | 
			
		||||
static DH *get_dh512(void);
 | 
			
		||||
static DH *get_dh2048(void);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef MONOLITH
 | 
			
		||||
@@ -227,30 +227,48 @@ static void s_server_init(void);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DH
 | 
			
		||||
static unsigned char dh512_p[] = {
 | 
			
		||||
    0xDA, 0x58, 0x3C, 0x16, 0xD9, 0x85, 0x22, 0x89, 0xD0, 0xE4, 0xAF, 0x75,
 | 
			
		||||
    0x6F, 0x4C, 0xCA, 0x92, 0xDD, 0x4B, 0xE5, 0x33, 0xB8, 0x04, 0xFB, 0x0F,
 | 
			
		||||
    0xED, 0x94, 0xEF, 0x9C, 0x8A, 0x44, 0x03, 0xED, 0x57, 0x46, 0x50, 0xD3,
 | 
			
		||||
    0x69, 0x99, 0xDB, 0x29, 0xD7, 0x76, 0x27, 0x6B, 0xA2, 0xD3, 0xD4, 0x12,
 | 
			
		||||
    0xE2, 0x18, 0xF4, 0xDD, 0x1E, 0x08, 0x4C, 0xF6, 0xD8, 0x00, 0x3E, 0x7C,
 | 
			
		||||
    0x47, 0x74, 0xE8, 0x33,
 | 
			
		||||
static unsigned char dh2048_p[] = {
 | 
			
		||||
    0xF6,0x42,0x57,0xB7,0x08,0x7F,0x08,0x17,0x72,0xA2,0xBA,0xD6,
 | 
			
		||||
    0xA9,0x42,0xF3,0x05,0xE8,0xF9,0x53,0x11,0x39,0x4F,0xB6,0xF1,
 | 
			
		||||
    0x6E,0xB9,0x4B,0x38,0x20,0xDA,0x01,0xA7,0x56,0xA3,0x14,0xE9,
 | 
			
		||||
    0x8F,0x40,0x55,0xF3,0xD0,0x07,0xC6,0xCB,0x43,0xA9,0x94,0xAD,
 | 
			
		||||
    0xF7,0x4C,0x64,0x86,0x49,0xF8,0x0C,0x83,0xBD,0x65,0xE9,0x17,
 | 
			
		||||
    0xD4,0xA1,0xD3,0x50,0xF8,0xF5,0x59,0x5F,0xDC,0x76,0x52,0x4F,
 | 
			
		||||
    0x3D,0x3D,0x8D,0xDB,0xCE,0x99,0xE1,0x57,0x92,0x59,0xCD,0xFD,
 | 
			
		||||
    0xB8,0xAE,0x74,0x4F,0xC5,0xFC,0x76,0xBC,0x83,0xC5,0x47,0x30,
 | 
			
		||||
    0x61,0xCE,0x7C,0xC9,0x66,0xFF,0x15,0xF9,0xBB,0xFD,0x91,0x5E,
 | 
			
		||||
    0xC7,0x01,0xAA,0xD3,0x5B,0x9E,0x8D,0xA0,0xA5,0x72,0x3A,0xD4,
 | 
			
		||||
    0x1A,0xF0,0xBF,0x46,0x00,0x58,0x2B,0xE5,0xF4,0x88,0xFD,0x58,
 | 
			
		||||
    0x4E,0x49,0xDB,0xCD,0x20,0xB4,0x9D,0xE4,0x91,0x07,0x36,0x6B,
 | 
			
		||||
    0x33,0x6C,0x38,0x0D,0x45,0x1D,0x0F,0x7C,0x88,0xB3,0x1C,0x7C,
 | 
			
		||||
    0x5B,0x2D,0x8E,0xF6,0xF3,0xC9,0x23,0xC0,0x43,0xF0,0xA5,0x5B,
 | 
			
		||||
    0x18,0x8D,0x8E,0xBB,0x55,0x8C,0xB8,0x5D,0x38,0xD3,0x34,0xFD,
 | 
			
		||||
    0x7C,0x17,0x57,0x43,0xA3,0x1D,0x18,0x6C,0xDE,0x33,0x21,0x2C,
 | 
			
		||||
    0xB5,0x2A,0xFF,0x3C,0xE1,0xB1,0x29,0x40,0x18,0x11,0x8D,0x7C,
 | 
			
		||||
    0x84,0xA7,0x0A,0x72,0xD6,0x86,0xC4,0x03,0x19,0xC8,0x07,0x29,
 | 
			
		||||
    0x7A,0xCA,0x95,0x0C,0xD9,0x96,0x9F,0xAB,0xD0,0x0A,0x50,0x9B,
 | 
			
		||||
    0x02,0x46,0xD3,0x08,0x3D,0x66,0xA4,0x5D,0x41,0x9F,0x9C,0x7C,
 | 
			
		||||
    0xBD,0x89,0x4B,0x22,0x19,0x26,0xBA,0xAB,0xA2,0x5E,0xC3,0x55,
 | 
			
		||||
    0xE9,0x32,0x0B,0x3B,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static unsigned char dh512_g[] = {
 | 
			
		||||
static unsigned char dh2048_g[] = {
 | 
			
		||||
    0x02,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static DH *get_dh512(void)
 | 
			
		||||
DH *get_dh2048()
 | 
			
		||||
{
 | 
			
		||||
    DH *dh = NULL;
 | 
			
		||||
    DH *dh;
 | 
			
		||||
 | 
			
		||||
    if ((dh = DH_new()) == NULL)
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    dh->p = BN_bin2bn(dh512_p, sizeof(dh512_p), NULL);
 | 
			
		||||
    dh->g = BN_bin2bn(dh512_g, sizeof(dh512_g), NULL);
 | 
			
		||||
    if ((dh->p == NULL) || (dh->g == NULL))
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    return (dh);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    dh->p=BN_bin2bn(dh2048_p, sizeof(dh2048_p), NULL);
 | 
			
		||||
    dh->g=BN_bin2bn(dh2048_g, sizeof(dh2048_g), NULL);
 | 
			
		||||
    if (dh->p == NULL || dh->g == NULL) {
 | 
			
		||||
        DH_free(dh);
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
    return dh;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -334,7 +352,7 @@ static unsigned int psk_server_cb(SSL *ssl, const char *identity,
 | 
			
		||||
    }
 | 
			
		||||
    if (s_debug)
 | 
			
		||||
        BIO_printf(bio_s_out, "identity_len=%d identity=%s\n",
 | 
			
		||||
                   identity ? (int)strlen(identity) : 0, identity);
 | 
			
		||||
                   (int)strlen(identity), identity);
 | 
			
		||||
 | 
			
		||||
    /* here we could lookup the given identity e.g. from a database */
 | 
			
		||||
    if (strcmp(identity, psk_identity) != 0) {
 | 
			
		||||
@@ -522,6 +540,8 @@ static void sv_usage(void)
 | 
			
		||||
    BIO_printf(bio_err, " -state        - Print the SSL states\n");
 | 
			
		||||
    BIO_printf(bio_err, " -CApath arg   - PEM format directory of CA's\n");
 | 
			
		||||
    BIO_printf(bio_err, " -CAfile arg   - PEM format file of CA's\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               " -no_alt_chains - only ever use the first certificate chain found\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
               " -nocert       - Don't use any certificates (Anon-DH)\n");
 | 
			
		||||
    BIO_printf(bio_err,
 | 
			
		||||
@@ -662,6 +682,8 @@ static int ebcdic_new(BIO *bi)
 | 
			
		||||
    EBCDIC_OUTBUFF *wbuf;
 | 
			
		||||
 | 
			
		||||
    wbuf = (EBCDIC_OUTBUFF *) OPENSSL_malloc(sizeof(EBCDIC_OUTBUFF) + 1024);
 | 
			
		||||
    if (!wbuf)
 | 
			
		||||
        return 0;
 | 
			
		||||
    wbuf->alloced = 1024;
 | 
			
		||||
    wbuf->buff[0] = '\0';
 | 
			
		||||
 | 
			
		||||
@@ -716,9 +738,11 @@ static int ebcdic_write(BIO *b, const char *in, int inl)
 | 
			
		||||
        num = num + num;        /* double the size */
 | 
			
		||||
        if (num < inl)
 | 
			
		||||
            num = inl;
 | 
			
		||||
        OPENSSL_free(wbuf);
 | 
			
		||||
        wbuf =
 | 
			
		||||
            (EBCDIC_OUTBUFF *) OPENSSL_malloc(sizeof(EBCDIC_OUTBUFF) + num);
 | 
			
		||||
        if (!wbuf)
 | 
			
		||||
            return 0;
 | 
			
		||||
        OPENSSL_free(b->ptr);
 | 
			
		||||
 | 
			
		||||
        wbuf->alloced = num;
 | 
			
		||||
        wbuf->buff[0] = '\0';
 | 
			
		||||
@@ -992,7 +1016,10 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
    int badop = 0, bugs = 0;
 | 
			
		||||
    int ret = 1;
 | 
			
		||||
    int off = 0;
 | 
			
		||||
    int no_tmp_rsa = 0, no_dhe = 0, no_ecdhe = 0, nocert = 0;
 | 
			
		||||
    int no_tmp_rsa = 0, no_dhe = 0, nocert = 0;
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
    int no_ecdhe = 0;
 | 
			
		||||
#endif
 | 
			
		||||
    int state = 0;
 | 
			
		||||
    const SSL_METHOD *meth = NULL;
 | 
			
		||||
    int socket_type = SOCK_STREAM;
 | 
			
		||||
@@ -1207,9 +1234,12 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
            no_tmp_rsa = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-no_dhe") == 0) {
 | 
			
		||||
            no_dhe = 1;
 | 
			
		||||
        } else if (strcmp(*argv, "-no_ecdhe") == 0) {
 | 
			
		||||
        }
 | 
			
		||||
#ifndef OPENSSL_NO_ECDH
 | 
			
		||||
        else if (strcmp(*argv, "-no_ecdhe") == 0) {
 | 
			
		||||
            no_ecdhe = 1;
 | 
			
		||||
        }
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_PSK
 | 
			
		||||
        else if (strcmp(*argv, "-psk_hint") == 0) {
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
@@ -1541,12 +1571,6 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
    if (hack)
 | 
			
		||||
        SSL_CTX_set_options(ctx, SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG);
 | 
			
		||||
    SSL_CTX_set_options(ctx, off);
 | 
			
		||||
    /*
 | 
			
		||||
     * DTLS: partial reads end up discarding unread UDP bytes :-( Setting
 | 
			
		||||
     * read ahead solves this problem.
 | 
			
		||||
     */
 | 
			
		||||
    if (socket_type == SOCK_DGRAM)
 | 
			
		||||
        SSL_CTX_set_read_ahead(ctx, 1);
 | 
			
		||||
 | 
			
		||||
    if (state)
 | 
			
		||||
        SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback);
 | 
			
		||||
@@ -1614,12 +1638,6 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
        if (hack)
 | 
			
		||||
            SSL_CTX_set_options(ctx2, SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG);
 | 
			
		||||
        SSL_CTX_set_options(ctx2, off);
 | 
			
		||||
        /*
 | 
			
		||||
         * DTLS: partial reads end up discarding unread UDP bytes :-(
 | 
			
		||||
         * Setting read ahead solves this problem.
 | 
			
		||||
         */
 | 
			
		||||
        if (socket_type == SOCK_DGRAM)
 | 
			
		||||
            SSL_CTX_set_read_ahead(ctx2, 1);
 | 
			
		||||
 | 
			
		||||
        if (state)
 | 
			
		||||
            SSL_CTX_set_info_callback(ctx2, apps_ssl_info_callback);
 | 
			
		||||
@@ -1656,7 +1674,11 @@ int MAIN(int argc, char *argv[])
 | 
			
		||||
            BIO_printf(bio_s_out, "Setting temp DH parameters\n");
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_s_out, "Using default temp DH parameters\n");
 | 
			
		||||
            dh = get_dh512();
 | 
			
		||||
            dh = get_dh2048();
 | 
			
		||||
            if (dh == NULL) {
 | 
			
		||||
                ERR_print_errors(bio_err);
 | 
			
		||||
                goto end;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        (void)BIO_flush(bio_s_out);
 | 
			
		||||
 | 
			
		||||
@@ -2253,8 +2275,10 @@ static int sv_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
                    ret = 1;
 | 
			
		||||
                    goto err;
 | 
			
		||||
                }
 | 
			
		||||
                l += k;
 | 
			
		||||
                i -= k;
 | 
			
		||||
                if (k > 0) {
 | 
			
		||||
                    l += k;
 | 
			
		||||
                    i -= k;
 | 
			
		||||
                }
 | 
			
		||||
                if (i <= 0)
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
@@ -2630,6 +2654,21 @@ static int www_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
                goto err;
 | 
			
		||||
            } else {
 | 
			
		||||
                BIO_printf(bio_s_out, "read R BLOCK\n");
 | 
			
		||||
#ifndef OPENSSL_NO_SRP
 | 
			
		||||
                if (BIO_should_io_special(io)
 | 
			
		||||
                    && BIO_get_retry_reason(io) == BIO_RR_SSL_X509_LOOKUP) {
 | 
			
		||||
                    BIO_printf(bio_s_out, "LOOKUP renego during read\n");
 | 
			
		||||
                    srp_callback_parm.user =
 | 
			
		||||
                        SRP_VBASE_get_by_user(srp_callback_parm.vb,
 | 
			
		||||
                                              srp_callback_parm.login);
 | 
			
		||||
                    if (srp_callback_parm.user)
 | 
			
		||||
                        BIO_printf(bio_s_out, "LOOKUP done %s\n",
 | 
			
		||||
                                   srp_callback_parm.user->info);
 | 
			
		||||
                    else
 | 
			
		||||
                        BIO_printf(bio_s_out, "LOOKUP not successful\n");
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(OPENSSL_SYS_NETWARE)
 | 
			
		||||
                delay(1000);
 | 
			
		||||
#elif !defined(OPENSSL_SYS_MSDOS) && !defined(__DJGPP__)
 | 
			
		||||
@@ -2644,7 +2683,7 @@ static int www_body(char *hostname, int s, unsigned char *context)
 | 
			
		||||
 | 
			
		||||
        /* else we have data */
 | 
			
		||||
        if (((www == 1) && (strncmp("GET ", buf, 4) == 0)) ||
 | 
			
		||||
            ((www == 2) && (strncmp("GET /stats ", buf, 10) == 0))) {
 | 
			
		||||
            ((www == 2) && (strncmp("GET /stats ", buf, 11) == 0))) {
 | 
			
		||||
            char *p;
 | 
			
		||||
            X509 *peer;
 | 
			
		||||
            STACK_OF(SSL_CIPHER) *sk;
 | 
			
		||||
@@ -2918,7 +2957,8 @@ static int generate_session_id(const SSL *ssl, unsigned char *id,
 | 
			
		||||
{
 | 
			
		||||
    unsigned int count = 0;
 | 
			
		||||
    do {
 | 
			
		||||
        RAND_pseudo_bytes(id, *id_len);
 | 
			
		||||
        if (RAND_pseudo_bytes(id, *id_len) < 0)
 | 
			
		||||
            return 0;
 | 
			
		||||
        /*
 | 
			
		||||
         * Prefix the session_id with the required prefix. NB: If our prefix
 | 
			
		||||
         * is too long, clip it - but there will be worse effects anyway, eg.
 | 
			
		||||
 
 | 
			
		||||
@@ -302,6 +302,10 @@ static int parseArgs(int argc, char **argv)
 | 
			
		||||
            if (--argc < 1)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            maxTime = atoi(*(++argv));
 | 
			
		||||
            if (maxTime <= 0) {
 | 
			
		||||
                BIO_printf(bio_err, "time must be > 0\n");
 | 
			
		||||
                badop = 1;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            BIO_printf(bio_err, "unknown option %s\n", *argv);
 | 
			
		||||
            badop = 1;
 | 
			
		||||
@@ -550,7 +554,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
         nConn, totalTime, ((double)nConn / totalTime), bytes_read);
 | 
			
		||||
    printf
 | 
			
		||||
        ("%d connections in %ld real seconds, %ld bytes read per connection\n",
 | 
			
		||||
         nConn, (long)time(NULL) - finishtime + maxTime, bytes_read / nConn);
 | 
			
		||||
         nConn, (long)time(NULL) - finishtime + maxTime,
 | 
			
		||||
         bytes_read / (nConn?nConn:1));
 | 
			
		||||
 | 
			
		||||
    ret = 0;
 | 
			
		||||
 end:
 | 
			
		||||
 
 | 
			
		||||
@@ -441,6 +441,8 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-CApath dir    trusted certificates directory\n");
 | 
			
		||||
        BIO_printf(bio_err, "-CAfile file   trusted certificates file\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-no_alt_chains only ever use the first certificate chain found\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "-crl_check     check revocation status of signer's certificate using CRLs\n");
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
 
 | 
			
		||||
@@ -435,10 +435,18 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
# ifdef OPENSSL_SYS_VMS
 | 
			
		||||
            len = strlen(s) + sizeof(CONFIG_FILE);
 | 
			
		||||
            tofree = OPENSSL_malloc(len);
 | 
			
		||||
            if (!tofree) {
 | 
			
		||||
                BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
                goto err;
 | 
			
		||||
            }
 | 
			
		||||
            strcpy(tofree, s);
 | 
			
		||||
# else
 | 
			
		||||
            len = strlen(s) + sizeof(CONFIG_FILE) + 1;
 | 
			
		||||
            tofree = OPENSSL_malloc(len);
 | 
			
		||||
            if (!tofree) {
 | 
			
		||||
                BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
                goto err;
 | 
			
		||||
            }
 | 
			
		||||
            BUF_strlcpy(tofree, s, len);
 | 
			
		||||
            BUF_strlcat(tofree, "/", len);
 | 
			
		||||
# endif
 | 
			
		||||
 
 | 
			
		||||
@@ -227,7 +227,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
    if (ret == 1) {
 | 
			
		||||
        BIO_printf(bio_err,
 | 
			
		||||
                   "usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check]");
 | 
			
		||||
        BIO_printf(bio_err, " [-attime timestamp]");
 | 
			
		||||
        BIO_printf(bio_err, " [-no_alt_chains] [-attime timestamp]");
 | 
			
		||||
#ifndef OPENSSL_NO_ENGINE
 | 
			
		||||
        BIO_printf(bio_err, " [-engine e]");
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -783,6 +783,11 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
                z = i2d_X509(x, NULL);
 | 
			
		||||
                m = OPENSSL_malloc(z);
 | 
			
		||||
                if (!m) {
 | 
			
		||||
                    BIO_printf(bio_err, "Out of memory\n");
 | 
			
		||||
                    ERR_print_errors(bio_err);
 | 
			
		||||
                    goto end;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                d = (unsigned char *)m;
 | 
			
		||||
                z = i2d_X509_NAME(X509_get_subject_name(x), &d);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										60
									
								
								appveyor.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								appveyor.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
platform:
 | 
			
		||||
    - x86
 | 
			
		||||
    - x64
 | 
			
		||||
 | 
			
		||||
environment:
 | 
			
		||||
    matrix:
 | 
			
		||||
        - VSVER: 9
 | 
			
		||||
        - VSVER: 10
 | 
			
		||||
        - VSVER: 11
 | 
			
		||||
        - VSVER: 12
 | 
			
		||||
        - VSVER: 14
 | 
			
		||||
 | 
			
		||||
configuration:
 | 
			
		||||
    - plain
 | 
			
		||||
    - shared
 | 
			
		||||
 | 
			
		||||
matrix:
 | 
			
		||||
    allow_failures:
 | 
			
		||||
        - platform: x64
 | 
			
		||||
          VSVER: 9
 | 
			
		||||
        - platform: x64
 | 
			
		||||
          VSVER: 10
 | 
			
		||||
        - platform: x64
 | 
			
		||||
          VSVER: 11
 | 
			
		||||
 | 
			
		||||
before_build:
 | 
			
		||||
    - ps: >-
 | 
			
		||||
        If ($env:Platform -Match "x86") {
 | 
			
		||||
            $env:VCVARS_PLATFORM="x86"
 | 
			
		||||
            $env:TARGET="VC-WIN32"
 | 
			
		||||
            $env:DO="do_ms"
 | 
			
		||||
        } Else {
 | 
			
		||||
            $env:VCVARS_PLATFORM="amd64"
 | 
			
		||||
            $env:TARGET="VC-WIN64A"
 | 
			
		||||
            $env:DO="do_win64a"
 | 
			
		||||
        }
 | 
			
		||||
    - ps: >-
 | 
			
		||||
        If ($env:Configuration -Like "*shared*") {
 | 
			
		||||
            $env:MAK="ntdll.mak"
 | 
			
		||||
        } Else {
 | 
			
		||||
            $env:MAK="nt.mak"
 | 
			
		||||
        }
 | 
			
		||||
    - ps: $env:VSCOMNTOOLS=(Get-Content ("env:VS" + "$env:VSVER" + "0COMNTOOLS"))
 | 
			
		||||
    - call "%VSCOMNTOOLS%\..\..\VC\vcvarsall.bat" %VCVARS_PLATFORM%
 | 
			
		||||
    - perl Configure %TARGET% no-asm
 | 
			
		||||
    - call ms\%DO%
 | 
			
		||||
 | 
			
		||||
build_script:
 | 
			
		||||
    - nmake /f ms\%MAK%
 | 
			
		||||
 | 
			
		||||
test_script:
 | 
			
		||||
    - nmake /f ms\%MAK% test
 | 
			
		||||
 | 
			
		||||
notifications:
 | 
			
		||||
    - provider: Email
 | 
			
		||||
      to:
 | 
			
		||||
          - openssl-commits@openssl.org
 | 
			
		||||
      on_build_success: false
 | 
			
		||||
      on_build_failure: true
 | 
			
		||||
      on_build_status_changed: true
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
lib
 | 
			
		||||
buildinf.h
 | 
			
		||||
opensslconf.h
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
*cpuid.s
 | 
			
		||||
uplink-cof.s
 | 
			
		||||
@@ -125,12 +125,17 @@ install:
 | 
			
		||||
lint:
 | 
			
		||||
	@target=lint; $(RECURSIVE_MAKE)
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
update: local_depend
 | 
			
		||||
	@[ -z "$(THIS)" ] || (set -e; target=update; $(RECURSIVE_MAKE) )
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
 | 
			
		||||
 | 
			
		||||
depend: local_depend
 | 
			
		||||
	@[ -z "$(THIS)" ] || (set -e; target=depend; $(RECURSIVE_MAKE) )
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
 | 
			
		||||
local_depend:
 | 
			
		||||
	@[ -z "$(THIS)" -o -f buildinf.h ] || touch buildinf.h # fake buildinf.h if it does not exist
 | 
			
		||||
	@[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDE) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
			
		||||
	@[ -z "$(THIS)" -o -s buildinf.h ] || rm buildinf.h
 | 
			
		||||
	@[ -z "$(THIS)" ] || (set -e; target=depend; $(RECURSIVE_MAKE) )
 | 
			
		||||
	@if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f buildinf.h *.s *.o */*.o *.obj lib tags core .pure .nfs* *.old *.bak fluff
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
lib
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
aes-*.s
 | 
			
		||||
@@ -106,6 +106,8 @@ tests:
 | 
			
		||||
lint:
 | 
			
		||||
	lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
			
		||||
 | 
			
		||||
update: depend
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
 | 
			
		||||
	$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
			
		||||
 
 | 
			
		||||
@@ -1130,31 +1130,31 @@ void AES_decrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
     * map cipher state to byte array block:
 | 
			
		||||
     */
 | 
			
		||||
    s0 =
 | 
			
		||||
        (Td4[(t0 >> 24)       ] << 24) ^
 | 
			
		||||
        (Td4[(t3 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        (Td4[(t2 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        (Td4[(t1      ) & 0xff])       ^
 | 
			
		||||
        ((u32)Td4[(t0 >> 24)       ] << 24) ^
 | 
			
		||||
        ((u32)Td4[(t3 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        ((u32)Td4[(t2 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        ((u32)Td4[(t1      ) & 0xff])       ^
 | 
			
		||||
        rk[0];
 | 
			
		||||
    PUTU32(out     , s0);
 | 
			
		||||
    s1 =
 | 
			
		||||
        (Td4[(t1 >> 24)       ] << 24) ^
 | 
			
		||||
        (Td4[(t0 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        (Td4[(t3 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        (Td4[(t2      ) & 0xff])       ^
 | 
			
		||||
        ((u32)Td4[(t1 >> 24)       ] << 24) ^
 | 
			
		||||
        ((u32)Td4[(t0 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        ((u32)Td4[(t3 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        ((u32)Td4[(t2      ) & 0xff])       ^
 | 
			
		||||
        rk[1];
 | 
			
		||||
    PUTU32(out +  4, s1);
 | 
			
		||||
    s2 =
 | 
			
		||||
        (Td4[(t2 >> 24)       ] << 24) ^
 | 
			
		||||
        (Td4[(t1 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        (Td4[(t0 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        (Td4[(t3      ) & 0xff])       ^
 | 
			
		||||
        ((u32)Td4[(t2 >> 24)       ] << 24) ^
 | 
			
		||||
        ((u32)Td4[(t1 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        ((u32)Td4[(t0 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        ((u32)Td4[(t3      ) & 0xff])       ^
 | 
			
		||||
        rk[2];
 | 
			
		||||
    PUTU32(out +  8, s2);
 | 
			
		||||
    s3 =
 | 
			
		||||
        (Td4[(t3 >> 24)       ] << 24) ^
 | 
			
		||||
        (Td4[(t2 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        (Td4[(t1 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        (Td4[(t0      ) & 0xff])       ^
 | 
			
		||||
        ((u32)Td4[(t3 >> 24)       ] << 24) ^
 | 
			
		||||
        ((u32)Td4[(t2 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        ((u32)Td4[(t1 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        ((u32)Td4[(t0      ) & 0xff])       ^
 | 
			
		||||
        rk[3];
 | 
			
		||||
    PUTU32(out + 12, s3);
 | 
			
		||||
}
 | 
			
		||||
@@ -1233,10 +1233,10 @@ int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
        while (1) {
 | 
			
		||||
            temp  = rk[3];
 | 
			
		||||
            rk[4] = rk[0] ^
 | 
			
		||||
                (Te4[(temp >> 16) & 0xff] << 24) ^
 | 
			
		||||
                (Te4[(temp >>  8) & 0xff] << 16) ^
 | 
			
		||||
                (Te4[(temp      ) & 0xff] << 8) ^
 | 
			
		||||
                (Te4[(temp >> 24)       ]) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 16) & 0xff] << 24) ^
 | 
			
		||||
                ((u32)Te4[(temp >>  8) & 0xff] << 16) ^
 | 
			
		||||
                ((u32)Te4[(temp      ) & 0xff] << 8) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 24)       ]) ^
 | 
			
		||||
                rcon[i];
 | 
			
		||||
            rk[5] = rk[1] ^ rk[4];
 | 
			
		||||
            rk[6] = rk[2] ^ rk[5];
 | 
			
		||||
@@ -1253,10 +1253,10 @@ int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
        while (1) {
 | 
			
		||||
            temp = rk[ 5];
 | 
			
		||||
            rk[ 6] = rk[ 0] ^
 | 
			
		||||
                (Te4[(temp >> 16) & 0xff] << 24) ^
 | 
			
		||||
                (Te4[(temp >>  8) & 0xff] << 16) ^
 | 
			
		||||
                (Te4[(temp      ) & 0xff] << 8) ^
 | 
			
		||||
                (Te4[(temp >> 24)       ]) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 16) & 0xff] << 24) ^
 | 
			
		||||
                ((u32)Te4[(temp >>  8) & 0xff] << 16) ^
 | 
			
		||||
                ((u32)Te4[(temp      ) & 0xff] << 8) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 24)       ]) ^
 | 
			
		||||
                rcon[i];
 | 
			
		||||
            rk[ 7] = rk[ 1] ^ rk[ 6];
 | 
			
		||||
            rk[ 8] = rk[ 2] ^ rk[ 7];
 | 
			
		||||
@@ -1275,10 +1275,10 @@ int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
        while (1) {
 | 
			
		||||
            temp = rk[ 7];
 | 
			
		||||
            rk[ 8] = rk[ 0] ^
 | 
			
		||||
                (Te4[(temp >> 16) & 0xff] << 24) ^
 | 
			
		||||
                (Te4[(temp >>  8) & 0xff] << 16) ^
 | 
			
		||||
                (Te4[(temp      ) & 0xff] << 8) ^
 | 
			
		||||
                (Te4[(temp >> 24)       ]) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 16) & 0xff] << 24) ^
 | 
			
		||||
                ((u32)Te4[(temp >>  8) & 0xff] << 16) ^
 | 
			
		||||
                ((u32)Te4[(temp      ) & 0xff] << 8) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 24)       ]) ^
 | 
			
		||||
                rcon[i];
 | 
			
		||||
            rk[ 9] = rk[ 1] ^ rk[ 8];
 | 
			
		||||
            rk[10] = rk[ 2] ^ rk[ 9];
 | 
			
		||||
@@ -1288,10 +1288,10 @@ int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
            }
 | 
			
		||||
            temp = rk[11];
 | 
			
		||||
            rk[12] = rk[ 4] ^
 | 
			
		||||
                (Te4[(temp >> 24)       ] << 24) ^
 | 
			
		||||
                (Te4[(temp >> 16) & 0xff] << 16) ^
 | 
			
		||||
                (Te4[(temp >>  8) & 0xff] << 8) ^
 | 
			
		||||
                (Te4[(temp      ) & 0xff]);
 | 
			
		||||
                ((u32)Te4[(temp >> 24)       ] << 24) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 16) & 0xff] << 16) ^
 | 
			
		||||
                ((u32)Te4[(temp >>  8) & 0xff] << 8) ^
 | 
			
		||||
                ((u32)Te4[(temp      ) & 0xff]);
 | 
			
		||||
            rk[13] = rk[ 5] ^ rk[12];
 | 
			
		||||
            rk[14] = rk[ 6] ^ rk[13];
 | 
			
		||||
            rk[15] = rk[ 7] ^ rk[14];
 | 
			
		||||
 
 | 
			
		||||
@@ -497,10 +497,10 @@ int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
        while (1) {
 | 
			
		||||
            temp  = rk[3];
 | 
			
		||||
            rk[4] = rk[0] ^
 | 
			
		||||
                (Te4[(temp >>  8) & 0xff]      ) ^
 | 
			
		||||
                (Te4[(temp >> 16) & 0xff] <<  8) ^
 | 
			
		||||
                (Te4[(temp >> 24)       ] << 16) ^
 | 
			
		||||
                (Te4[(temp      ) & 0xff] << 24) ^
 | 
			
		||||
                ((u32)Te4[(temp >>  8) & 0xff]      ) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 16) & 0xff] <<  8) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 24)       ] << 16) ^
 | 
			
		||||
                ((u32)Te4[(temp      ) & 0xff] << 24) ^
 | 
			
		||||
                rcon[i];
 | 
			
		||||
            rk[5] = rk[1] ^ rk[4];
 | 
			
		||||
            rk[6] = rk[2] ^ rk[5];
 | 
			
		||||
@@ -517,10 +517,10 @@ int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
        while (1) {
 | 
			
		||||
            temp = rk[ 5];
 | 
			
		||||
            rk[ 6] = rk[ 0] ^
 | 
			
		||||
                (Te4[(temp >>  8) & 0xff]      ) ^
 | 
			
		||||
                (Te4[(temp >> 16) & 0xff] <<  8) ^
 | 
			
		||||
                (Te4[(temp >> 24)       ] << 16) ^
 | 
			
		||||
                (Te4[(temp      ) & 0xff] << 24) ^
 | 
			
		||||
                ((u32)Te4[(temp >>  8) & 0xff]      ) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 16) & 0xff] <<  8) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 24)       ] << 16) ^
 | 
			
		||||
                ((u32)Te4[(temp      ) & 0xff] << 24) ^
 | 
			
		||||
                rcon[i];
 | 
			
		||||
            rk[ 7] = rk[ 1] ^ rk[ 6];
 | 
			
		||||
            rk[ 8] = rk[ 2] ^ rk[ 7];
 | 
			
		||||
@@ -539,10 +539,10 @@ int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
        while (1) {
 | 
			
		||||
            temp = rk[ 7];
 | 
			
		||||
            rk[ 8] = rk[ 0] ^
 | 
			
		||||
                (Te4[(temp >>  8) & 0xff]      ) ^
 | 
			
		||||
                (Te4[(temp >> 16) & 0xff] <<  8) ^
 | 
			
		||||
                (Te4[(temp >> 24)       ] << 16) ^
 | 
			
		||||
                (Te4[(temp      ) & 0xff] << 24) ^
 | 
			
		||||
                ((u32)Te4[(temp >>  8) & 0xff]      ) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 16) & 0xff] <<  8) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 24)       ] << 16) ^
 | 
			
		||||
                ((u32)Te4[(temp      ) & 0xff] << 24) ^
 | 
			
		||||
                rcon[i];
 | 
			
		||||
            rk[ 9] = rk[ 1] ^ rk[ 8];
 | 
			
		||||
            rk[10] = rk[ 2] ^ rk[ 9];
 | 
			
		||||
@@ -552,10 +552,10 @@ int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
 | 
			
		||||
            }
 | 
			
		||||
            temp = rk[11];
 | 
			
		||||
            rk[12] = rk[ 4] ^
 | 
			
		||||
                (Te4[(temp      ) & 0xff]      ) ^
 | 
			
		||||
                (Te4[(temp >>  8) & 0xff] <<  8) ^
 | 
			
		||||
                (Te4[(temp >> 16) & 0xff] << 16) ^
 | 
			
		||||
                (Te4[(temp >> 24)       ] << 24);
 | 
			
		||||
                ((u32)Te4[(temp      ) & 0xff]      ) ^
 | 
			
		||||
                ((u32)Te4[(temp >>  8) & 0xff] <<  8) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 16) & 0xff] << 16) ^
 | 
			
		||||
                ((u32)Te4[(temp >> 24)       ] << 24);
 | 
			
		||||
            rk[13] = rk[ 5] ^ rk[12];
 | 
			
		||||
            rk[14] = rk[ 6] ^ rk[13];
 | 
			
		||||
            rk[15] = rk[ 7] ^ rk[14];
 | 
			
		||||
@@ -674,22 +674,22 @@ void AES_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
#if defined(AES_COMPACT_IN_OUTER_ROUNDS)
 | 
			
		||||
    prefetch256(Te4);
 | 
			
		||||
 | 
			
		||||
    t[0] =  Te4[(s0      ) & 0xff]       ^
 | 
			
		||||
        Te4[(s1 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Te4[(s2 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Te4[(s3 >> 24)       ] << 24;
 | 
			
		||||
    t[1] =  Te4[(s1      ) & 0xff]       ^
 | 
			
		||||
        Te4[(s2 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Te4[(s3 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Te4[(s0 >> 24)       ] << 24;
 | 
			
		||||
    t[2] =  Te4[(s2      ) & 0xff]       ^
 | 
			
		||||
        Te4[(s3 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Te4[(s0 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Te4[(s1 >> 24)       ] << 24;
 | 
			
		||||
    t[3] =  Te4[(s3      ) & 0xff]       ^
 | 
			
		||||
        Te4[(s0 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Te4[(s1 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Te4[(s2 >> 24)       ] << 24;
 | 
			
		||||
    t[0] = (u32)Te4[(s0      ) & 0xff]       ^
 | 
			
		||||
           (u32)Te4[(s1 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Te4[(s2 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Te4[(s3 >> 24)       ] << 24;
 | 
			
		||||
    t[1] = (u32)Te4[(s1      ) & 0xff]       ^
 | 
			
		||||
           (u32)Te4[(s2 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Te4[(s3 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Te4[(s0 >> 24)       ] << 24;
 | 
			
		||||
    t[2] = (u32)Te4[(s2      ) & 0xff]       ^
 | 
			
		||||
           (u32)Te4[(s3 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Te4[(s0 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Te4[(s1 >> 24)       ] << 24;
 | 
			
		||||
    t[3] = (u32)Te4[(s3      ) & 0xff]       ^
 | 
			
		||||
           (u32)Te4[(s0 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Te4[(s1 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Te4[(s2 >> 24)       ] << 24;
 | 
			
		||||
 | 
			
		||||
    /* now do the linear transform using words */
 | 
			
		||||
    {   int i;
 | 
			
		||||
@@ -740,22 +740,22 @@ void AES_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
     */
 | 
			
		||||
    for (rk+=8,r=key->rounds-2; r>0; rk+=4,r--) {
 | 
			
		||||
#if defined(AES_COMPACT_IN_INNER_ROUNDS)
 | 
			
		||||
        t[0] =  Te4[(s0      ) & 0xff]       ^
 | 
			
		||||
            Te4[(s1 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
            Te4[(s2 >> 16) & 0xff] << 16 ^
 | 
			
		||||
            Te4[(s3 >> 24)       ] << 24;
 | 
			
		||||
        t[1] =  Te4[(s1      ) & 0xff]       ^
 | 
			
		||||
            Te4[(s2 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
            Te4[(s3 >> 16) & 0xff] << 16 ^
 | 
			
		||||
            Te4[(s0 >> 24)       ] << 24;
 | 
			
		||||
        t[2] =  Te4[(s2      ) & 0xff]       ^
 | 
			
		||||
            Te4[(s3 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
            Te4[(s0 >> 16) & 0xff] << 16 ^
 | 
			
		||||
            Te4[(s1 >> 24)       ] << 24;
 | 
			
		||||
        t[3] =  Te4[(s3      ) & 0xff]       ^
 | 
			
		||||
            Te4[(s0 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
            Te4[(s1 >> 16) & 0xff] << 16 ^
 | 
			
		||||
            Te4[(s2 >> 24)       ] << 24;
 | 
			
		||||
        t[0] = (u32)Te4[(s0      ) & 0xff]       ^
 | 
			
		||||
               (u32)Te4[(s1 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
               (u32)Te4[(s2 >> 16) & 0xff] << 16 ^
 | 
			
		||||
               (u32)Te4[(s3 >> 24)       ] << 24;
 | 
			
		||||
        t[1] = (u32)Te4[(s1      ) & 0xff]       ^
 | 
			
		||||
               (u32)Te4[(s2 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
               (u32)Te4[(s3 >> 16) & 0xff] << 16 ^
 | 
			
		||||
               (u32)Te4[(s0 >> 24)       ] << 24;
 | 
			
		||||
        t[2] = (u32)Te4[(s2      ) & 0xff]       ^
 | 
			
		||||
               (u32)Te4[(s3 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
               (u32)Te4[(s0 >> 16) & 0xff] << 16 ^
 | 
			
		||||
               (u32)Te4[(s1 >> 24)       ] << 24;
 | 
			
		||||
        t[3] = (u32)Te4[(s3      ) & 0xff]       ^
 | 
			
		||||
               (u32)Te4[(s0 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
               (u32)Te4[(s1 >> 16) & 0xff] << 16 ^
 | 
			
		||||
               (u32)Te4[(s2 >> 24)       ] << 24;
 | 
			
		||||
 | 
			
		||||
        /* now do the linear transform using words */
 | 
			
		||||
        {
 | 
			
		||||
@@ -810,28 +810,28 @@ void AES_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
    prefetch256(Te4);
 | 
			
		||||
 | 
			
		||||
    *(u32*)(out+0) =
 | 
			
		||||
        Te4[(s0      ) & 0xff]       ^
 | 
			
		||||
        Te4[(s1 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Te4[(s2 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Te4[(s3 >> 24)       ] << 24 ^
 | 
			
		||||
           (u32)Te4[(s0      ) & 0xff]       ^
 | 
			
		||||
           (u32)Te4[(s1 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Te4[(s2 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Te4[(s3 >> 24)       ] << 24 ^
 | 
			
		||||
        rk[0];
 | 
			
		||||
    *(u32*)(out+4) =
 | 
			
		||||
        Te4[(s1      ) & 0xff]       ^
 | 
			
		||||
        Te4[(s2 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Te4[(s3 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Te4[(s0 >> 24)       ] << 24 ^
 | 
			
		||||
           (u32)Te4[(s1      ) & 0xff]       ^
 | 
			
		||||
           (u32)Te4[(s2 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Te4[(s3 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Te4[(s0 >> 24)       ] << 24 ^
 | 
			
		||||
        rk[1];
 | 
			
		||||
    *(u32*)(out+8) =
 | 
			
		||||
        Te4[(s2      ) & 0xff]       ^
 | 
			
		||||
        Te4[(s3 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Te4[(s0 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Te4[(s1 >> 24)       ] << 24 ^
 | 
			
		||||
           (u32)Te4[(s2      ) & 0xff]       ^
 | 
			
		||||
           (u32)Te4[(s3 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Te4[(s0 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Te4[(s1 >> 24)       ] << 24 ^
 | 
			
		||||
        rk[2];
 | 
			
		||||
    *(u32*)(out+12) =
 | 
			
		||||
        Te4[(s3      ) & 0xff]       ^
 | 
			
		||||
        Te4[(s0 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Te4[(s1 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Te4[(s2 >> 24)       ] << 24 ^
 | 
			
		||||
           (u32)Te4[(s3      ) & 0xff]       ^
 | 
			
		||||
           (u32)Te4[(s0 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Te4[(s1 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Te4[(s2 >> 24)       ] << 24 ^
 | 
			
		||||
        rk[3];
 | 
			
		||||
#else
 | 
			
		||||
    *(u32*)(out+0) =
 | 
			
		||||
@@ -888,22 +888,22 @@ void AES_decrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
#if defined(AES_COMPACT_IN_OUTER_ROUNDS)
 | 
			
		||||
    prefetch256(Td4);
 | 
			
		||||
 | 
			
		||||
    t[0] =  Td4[(s0      ) & 0xff]       ^
 | 
			
		||||
    Td4[(s3 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
    Td4[(s2 >> 16) & 0xff] << 16 ^
 | 
			
		||||
    Td4[(s1 >> 24)       ] << 24;
 | 
			
		||||
    t[1] =  Td4[(s1      ) & 0xff]       ^
 | 
			
		||||
    Td4[(s0 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
    Td4[(s3 >> 16) & 0xff] << 16 ^
 | 
			
		||||
    Td4[(s2 >> 24)       ] << 24;
 | 
			
		||||
    t[2] =  Td4[(s2      ) & 0xff]       ^
 | 
			
		||||
    Td4[(s1 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
    Td4[(s0 >> 16) & 0xff] << 16 ^
 | 
			
		||||
    Td4[(s3 >> 24)       ] << 24;
 | 
			
		||||
    t[3] =  Td4[(s3      ) & 0xff]       ^
 | 
			
		||||
    Td4[(s2 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
    Td4[(s1 >> 16) & 0xff] << 16 ^
 | 
			
		||||
    Td4[(s0 >> 24)       ] << 24;
 | 
			
		||||
    t[0] = (u32)Td4[(s0      ) & 0xff]       ^
 | 
			
		||||
           (u32)Td4[(s3 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Td4[(s2 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Td4[(s1 >> 24)       ] << 24;
 | 
			
		||||
    t[1] = (u32)Td4[(s1      ) & 0xff]       ^
 | 
			
		||||
           (u32)Td4[(s0 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Td4[(s3 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Td4[(s2 >> 24)       ] << 24;
 | 
			
		||||
    t[2] = (u32)Td4[(s2      ) & 0xff]       ^
 | 
			
		||||
           (u32)Td4[(s1 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Td4[(s0 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Td4[(s3 >> 24)       ] << 24;
 | 
			
		||||
    t[3] = (u32)Td4[(s3      ) & 0xff]       ^
 | 
			
		||||
           (u32)Td4[(s2 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
           (u32)Td4[(s1 >> 16) & 0xff] << 16 ^
 | 
			
		||||
           (u32)Td4[(s0 >> 24)       ] << 24;
 | 
			
		||||
 | 
			
		||||
    /* now do the linear transform using words */ 
 | 
			
		||||
    {
 | 
			
		||||
@@ -965,22 +965,22 @@ void AES_decrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
     */
 | 
			
		||||
    for (rk+=8,r=key->rounds-2; r>0; rk+=4,r--) {
 | 
			
		||||
#if defined(AES_COMPACT_IN_INNER_ROUNDS)
 | 
			
		||||
        t[0] =  Td4[(s0      ) & 0xff]       ^
 | 
			
		||||
        Td4[(s3 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Td4[(s2 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Td4[(s1 >> 24)       ] << 24;
 | 
			
		||||
        t[1] =  Td4[(s1      ) & 0xff]       ^
 | 
			
		||||
        Td4[(s0 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Td4[(s3 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Td4[(s2 >> 24)       ] << 24;
 | 
			
		||||
        t[2] =  Td4[(s2      ) & 0xff]       ^
 | 
			
		||||
        Td4[(s1 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Td4[(s0 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Td4[(s3 >> 24)       ] << 24;
 | 
			
		||||
        t[3] =  Td4[(s3      ) & 0xff]       ^
 | 
			
		||||
        Td4[(s2 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
        Td4[(s1 >> 16) & 0xff] << 16 ^
 | 
			
		||||
        Td4[(s0 >> 24)       ] << 24;
 | 
			
		||||
        t[0] = (u32)Td4[(s0      ) & 0xff]       ^
 | 
			
		||||
               (u32)Td4[(s3 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
               (u32)Td4[(s2 >> 16) & 0xff] << 16 ^
 | 
			
		||||
               (u32)Td4[(s1 >> 24)       ] << 24;
 | 
			
		||||
        t[1] = (u32)Td4[(s1      ) & 0xff]       ^
 | 
			
		||||
               (u32)Td4[(s0 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
               (u32)Td4[(s3 >> 16) & 0xff] << 16 ^
 | 
			
		||||
               (u32)Td4[(s2 >> 24)       ] << 24;
 | 
			
		||||
        t[2] = (u32)Td4[(s2      ) & 0xff]       ^
 | 
			
		||||
               (u32)Td4[(s1 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
               (u32)Td4[(s0 >> 16) & 0xff] << 16 ^
 | 
			
		||||
               (u32)Td4[(s3 >> 24)       ] << 24;
 | 
			
		||||
        t[3] = (u32)Td4[(s3      ) & 0xff]       ^
 | 
			
		||||
               (u32)Td4[(s2 >>  8) & 0xff] <<  8 ^
 | 
			
		||||
               (u32)Td4[(s1 >> 16) & 0xff] << 16 ^
 | 
			
		||||
               (u32)Td4[(s0 >> 24)       ] << 24;
 | 
			
		||||
 | 
			
		||||
    /* now do the linear transform using words */ 
 | 
			
		||||
    {
 | 
			
		||||
@@ -1044,27 +1044,27 @@ void AES_decrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
    prefetch256(Td4);
 | 
			
		||||
 | 
			
		||||
    *(u32*)(out+0) =
 | 
			
		||||
        (Td4[(s0      ) & 0xff])    ^
 | 
			
		||||
        (Td4[(s3 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        (Td4[(s2 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        (Td4[(s1 >> 24)       ] << 24) ^
 | 
			
		||||
        ((u32)Td4[(s0      ) & 0xff])    ^
 | 
			
		||||
        ((u32)Td4[(s3 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        ((u32)Td4[(s2 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        ((u32)Td4[(s1 >> 24)       ] << 24) ^
 | 
			
		||||
        rk[0];
 | 
			
		||||
    *(u32*)(out+4) =
 | 
			
		||||
        (Td4[(s1      ) & 0xff])     ^
 | 
			
		||||
        (Td4[(s0 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        (Td4[(s3 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        (Td4[(s2 >> 24)       ] << 24) ^
 | 
			
		||||
        ((u32)Td4[(s1      ) & 0xff])     ^
 | 
			
		||||
        ((u32)Td4[(s0 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        ((u32)Td4[(s3 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        ((u32)Td4[(s2 >> 24)       ] << 24) ^
 | 
			
		||||
        rk[1];
 | 
			
		||||
    *(u32*)(out+8) =
 | 
			
		||||
        (Td4[(s2      ) & 0xff])     ^
 | 
			
		||||
        (Td4[(s1 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        (Td4[(s0 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        (Td4[(s3 >> 24)       ] << 24) ^
 | 
			
		||||
        ((u32)Td4[(s2      ) & 0xff])     ^
 | 
			
		||||
        ((u32)Td4[(s1 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        ((u32)Td4[(s0 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        ((u32)Td4[(s3 >> 24)       ] << 24) ^
 | 
			
		||||
        rk[2];
 | 
			
		||||
    *(u32*)(out+12) =
 | 
			
		||||
        (Td4[(s3      ) & 0xff])     ^
 | 
			
		||||
        (Td4[(s2 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        (Td4[(s1 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        (Td4[(s0 >> 24)       ] << 24) ^
 | 
			
		||||
        ((u32)Td4[(s3      ) & 0xff])     ^
 | 
			
		||||
        ((u32)Td4[(s2 >>  8) & 0xff] <<  8) ^
 | 
			
		||||
        ((u32)Td4[(s1 >> 16) & 0xff] << 16) ^
 | 
			
		||||
        ((u32)Td4[(s0 >> 24)       ] << 24) ^
 | 
			
		||||
        rk[3];
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,7 @@
 | 
			
		||||
# the undertaken effort was that it appeared that in tight IA-32
 | 
			
		||||
# register window little-endian flavor could achieve slightly higher
 | 
			
		||||
# Instruction Level Parallelism, and it indeed resulted in up to 15%
 | 
			
		||||
# better performance on most recent <EFBFBD>-archs...
 | 
			
		||||
# better performance on most recent µ-archs...
 | 
			
		||||
#
 | 
			
		||||
# Third version adds AES_cbc_encrypt implementation, which resulted in
 | 
			
		||||
# up to 40% performance imrovement of CBC benchmark results. 40% was
 | 
			
		||||
@@ -223,7 +223,7 @@ sub _data_word() { my $i; while(defined($i=shift)) { &data_word($i,$i); } }
 | 
			
		||||
$speed_limit=512;	# chunks smaller than $speed_limit are
 | 
			
		||||
			# processed with compact routine in CBC mode
 | 
			
		||||
$small_footprint=1;	# $small_footprint=1 code is ~5% slower [on
 | 
			
		||||
			# recent <EFBFBD>-archs], but ~5 times smaller!
 | 
			
		||||
			# recent µ-archs], but ~5 times smaller!
 | 
			
		||||
			# I favor compact code to minimize cache
 | 
			
		||||
			# contention and in hope to "collect" 5% back
 | 
			
		||||
			# in real-life applications...
 | 
			
		||||
@@ -562,7 +562,7 @@ sub enctransform()
 | 
			
		||||
# Performance is not actually extraordinary in comparison to pure
 | 
			
		||||
# x86 code. In particular encrypt performance is virtually the same.
 | 
			
		||||
# Decrypt performance on the other hand is 15-20% better on newer
 | 
			
		||||
# <EFBFBD>-archs [but we're thankful for *any* improvement here], and ~50%
 | 
			
		||||
# µ-archs [but we're thankful for *any* improvement here], and ~50%
 | 
			
		||||
# better on PIII:-) And additionally on the pros side this code
 | 
			
		||||
# eliminates redundant references to stack and thus relieves/
 | 
			
		||||
# minimizes the pressure on the memory bus.
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,7 @@ $inout3="xmm5";	$in1="xmm5";
 | 
			
		||||
$inout4="xmm6";	$in0="xmm6";
 | 
			
		||||
$inout5="xmm7";	$ivec="xmm7";
 | 
			
		||||
 | 
			
		||||
# AESNI extenstion
 | 
			
		||||
# AESNI extension
 | 
			
		||||
sub aeskeygenassist
 | 
			
		||||
{ my($dst,$src,$imm)=@_;
 | 
			
		||||
    if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
lib
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
@@ -93,6 +93,8 @@ tests:
 | 
			
		||||
lint:
 | 
			
		||||
	lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
			
		||||
 | 
			
		||||
update: depend
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@[ -n "$(MAKEDEPEND)" ] # should be set by top Makefile...
 | 
			
		||||
	$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
			
		||||
 
 | 
			
		||||
@@ -124,6 +124,8 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
 | 
			
		||||
    else {
 | 
			
		||||
        ret = a->length;
 | 
			
		||||
        i = a->data[0];
 | 
			
		||||
        if (ret == 1 && i == 0)
 | 
			
		||||
            neg = 0;
 | 
			
		||||
        if (!neg && (i > 127)) {
 | 
			
		||||
            pad = 1;
 | 
			
		||||
            pb = 0;
 | 
			
		||||
@@ -162,7 +164,7 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
 | 
			
		||||
        p += a->length - 1;
 | 
			
		||||
        i = a->length;
 | 
			
		||||
        /* Copy zeros to destination as long as source is zero */
 | 
			
		||||
        while (!*n) {
 | 
			
		||||
        while (!*n && i > 1) {
 | 
			
		||||
            *(p--) = 0;
 | 
			
		||||
            n--;
 | 
			
		||||
            i--;
 | 
			
		||||
@@ -419,7 +421,7 @@ ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai)
 | 
			
		||||
        ASN1err(ASN1_F_BN_TO_ASN1_INTEGER, ERR_R_NESTED_ASN1_ERROR);
 | 
			
		||||
        goto err;
 | 
			
		||||
    }
 | 
			
		||||
    if (BN_is_negative(bn))
 | 
			
		||||
    if (BN_is_negative(bn) && !BN_is_zero(bn))
 | 
			
		||||
        ret->type = V_ASN1_NEG_INTEGER;
 | 
			
		||||
    else
 | 
			
		||||
        ret->type = V_ASN1_INTEGER;
 | 
			
		||||
 
 | 
			
		||||
@@ -119,6 +119,9 @@ int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b)
 | 
			
		||||
    case V_ASN1_OBJECT:
 | 
			
		||||
        result = OBJ_cmp(a->value.object, b->value.object);
 | 
			
		||||
        break;
 | 
			
		||||
    case V_ASN1_BOOLEAN:
 | 
			
		||||
        result = a->value.boolean - b->value.boolean;
 | 
			
		||||
        break;
 | 
			
		||||
    case V_ASN1_NULL:
 | 
			
		||||
        result = 0;             /* They do not have content. */
 | 
			
		||||
        break;
 | 
			
		||||
 
 | 
			
		||||
@@ -795,6 +795,7 @@ DECLARE_ASN1_SET_OF(ASN1_OBJECT)
 | 
			
		||||
 | 
			
		||||
ASN1_STRING *ASN1_STRING_new(void);
 | 
			
		||||
void ASN1_STRING_free(ASN1_STRING *a);
 | 
			
		||||
void ASN1_STRING_clear_free(ASN1_STRING *a);
 | 
			
		||||
int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str);
 | 
			
		||||
ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a);
 | 
			
		||||
ASN1_STRING *ASN1_STRING_type_new(int type);
 | 
			
		||||
 
 | 
			
		||||
@@ -74,6 +74,8 @@
 | 
			
		||||
#define ASN1_GEN_STR(str,val)   {str, sizeof(str) - 1, val}
 | 
			
		||||
 | 
			
		||||
#define ASN1_FLAG_EXP_MAX       20
 | 
			
		||||
/* Maximum number of nested sequences */
 | 
			
		||||
#define ASN1_GEN_SEQ_MAX_DEPTH  50
 | 
			
		||||
 | 
			
		||||
/* Input formats */
 | 
			
		||||
 | 
			
		||||
@@ -110,13 +112,16 @@ typedef struct {
 | 
			
		||||
    int exp_count;
 | 
			
		||||
} tag_exp_arg;
 | 
			
		||||
 | 
			
		||||
static ASN1_TYPE *generate_v3(char *str, X509V3_CTX *cnf, int depth,
 | 
			
		||||
                              int *perr);
 | 
			
		||||
static int bitstr_cb(const char *elem, int len, void *bitstr);
 | 
			
		||||
static int asn1_cb(const char *elem, int len, void *bitstr);
 | 
			
		||||
static int append_exp(tag_exp_arg *arg, int exp_tag, int exp_class,
 | 
			
		||||
                      int exp_constructed, int exp_pad, int imp_ok);
 | 
			
		||||
static int parse_tagging(const char *vstart, int vlen, int *ptag,
 | 
			
		||||
                         int *pclass);
 | 
			
		||||
static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf);
 | 
			
		||||
static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf,
 | 
			
		||||
                             int depth, int *perr);
 | 
			
		||||
static ASN1_TYPE *asn1_str2type(const char *str, int format, int utype);
 | 
			
		||||
static int asn1_str2tag(const char *tagstr, int len);
 | 
			
		||||
 | 
			
		||||
@@ -132,6 +137,16 @@ ASN1_TYPE *ASN1_generate_nconf(char *str, CONF *nconf)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf)
 | 
			
		||||
{
 | 
			
		||||
    int err = 0;
 | 
			
		||||
    ASN1_TYPE *ret = generate_v3(str, cnf, 0, &err);
 | 
			
		||||
    if (err)
 | 
			
		||||
        ASN1err(ASN1_F_ASN1_GENERATE_V3, err);
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static ASN1_TYPE *generate_v3(char *str, X509V3_CTX *cnf, int depth,
 | 
			
		||||
                              int *perr)
 | 
			
		||||
{
 | 
			
		||||
    ASN1_TYPE *ret;
 | 
			
		||||
    tag_exp_arg asn1_tags;
 | 
			
		||||
@@ -152,17 +167,22 @@ ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf)
 | 
			
		||||
    asn1_tags.imp_class = -1;
 | 
			
		||||
    asn1_tags.format = ASN1_GEN_FORMAT_ASCII;
 | 
			
		||||
    asn1_tags.exp_count = 0;
 | 
			
		||||
    if (CONF_parse_list(str, ',', 1, asn1_cb, &asn1_tags) != 0)
 | 
			
		||||
    if (CONF_parse_list(str, ',', 1, asn1_cb, &asn1_tags) != 0) {
 | 
			
		||||
        *perr = ASN1_R_UNKNOWN_TAG;
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((asn1_tags.utype == V_ASN1_SEQUENCE)
 | 
			
		||||
        || (asn1_tags.utype == V_ASN1_SET)) {
 | 
			
		||||
        if (!cnf) {
 | 
			
		||||
            ASN1err(ASN1_F_ASN1_GENERATE_V3,
 | 
			
		||||
                    ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG);
 | 
			
		||||
            *perr = ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG;
 | 
			
		||||
            return NULL;
 | 
			
		||||
        }
 | 
			
		||||
        ret = asn1_multi(asn1_tags.utype, asn1_tags.str, cnf);
 | 
			
		||||
        if (depth >= ASN1_GEN_SEQ_MAX_DEPTH) {
 | 
			
		||||
            *perr = ASN1_R_ILLEGAL_NESTED_TAGGING;
 | 
			
		||||
            return NULL;
 | 
			
		||||
        }
 | 
			
		||||
        ret = asn1_multi(asn1_tags.utype, asn1_tags.str, cnf, depth, perr);
 | 
			
		||||
    } else
 | 
			
		||||
        ret = asn1_str2type(asn1_tags.str, asn1_tags.format, asn1_tags.utype);
 | 
			
		||||
 | 
			
		||||
@@ -279,6 +299,9 @@ static int asn1_cb(const char *elem, int len, void *bitstr)
 | 
			
		||||
 | 
			
		||||
    int tmp_tag, tmp_class;
 | 
			
		||||
 | 
			
		||||
    if (elem == NULL)
 | 
			
		||||
        return -1;
 | 
			
		||||
 | 
			
		||||
    for (i = 0, p = elem; i < len; p++, i++) {
 | 
			
		||||
        /* Look for the ':' in name value pairs */
 | 
			
		||||
        if (*p == ':') {
 | 
			
		||||
@@ -350,13 +373,17 @@ static int asn1_cb(const char *elem, int len, void *bitstr)
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    case ASN1_GEN_FLAG_FORMAT:
 | 
			
		||||
        if (!vstart) {
 | 
			
		||||
            ASN1err(ASN1_F_ASN1_CB, ASN1_R_UNKNOWN_FORMAT);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        if (!strncmp(vstart, "ASCII", 5))
 | 
			
		||||
            arg->format = ASN1_GEN_FORMAT_ASCII;
 | 
			
		||||
        else if (!strncmp(vstart, "UTF8", 4))
 | 
			
		||||
            arg->format = ASN1_GEN_FORMAT_UTF8;
 | 
			
		||||
        else if (!strncmp(vstart, "HEX", 3))
 | 
			
		||||
            arg->format = ASN1_GEN_FORMAT_HEX;
 | 
			
		||||
        else if (!strncmp(vstart, "BITLIST", 3))
 | 
			
		||||
        else if (!strncmp(vstart, "BITLIST", 7))
 | 
			
		||||
            arg->format = ASN1_GEN_FORMAT_BITLIST;
 | 
			
		||||
        else {
 | 
			
		||||
            ASN1err(ASN1_F_ASN1_CB, ASN1_R_UNKOWN_FORMAT);
 | 
			
		||||
@@ -428,7 +455,8 @@ static int parse_tagging(const char *vstart, int vlen, int *ptag, int *pclass)
 | 
			
		||||
 | 
			
		||||
/* Handle multiple types: SET and SEQUENCE */
 | 
			
		||||
 | 
			
		||||
static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf)
 | 
			
		||||
static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf,
 | 
			
		||||
                             int depth, int *perr)
 | 
			
		||||
{
 | 
			
		||||
    ASN1_TYPE *ret = NULL;
 | 
			
		||||
    STACK_OF(ASN1_TYPE) *sk = NULL;
 | 
			
		||||
@@ -447,7 +475,8 @@ static ASN1_TYPE *asn1_multi(int utype, const char *section, X509V3_CTX *cnf)
 | 
			
		||||
            goto bad;
 | 
			
		||||
        for (i = 0; i < sk_CONF_VALUE_num(sect); i++) {
 | 
			
		||||
            ASN1_TYPE *typ =
 | 
			
		||||
                ASN1_generate_v3(sk_CONF_VALUE_value(sect, i)->value, cnf);
 | 
			
		||||
                generate_v3(sk_CONF_VALUE_value(sect, i)->value, cnf,
 | 
			
		||||
                            depth + 1, perr);
 | 
			
		||||
            if (!typ)
 | 
			
		||||
                goto bad;
 | 
			
		||||
            if (!sk_ASN1_TYPE_push(sk, typ))
 | 
			
		||||
 
 | 
			
		||||
@@ -430,6 +430,13 @@ void ASN1_STRING_free(ASN1_STRING *a)
 | 
			
		||||
    OPENSSL_free(a);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ASN1_STRING_clear_free(ASN1_STRING *a)
 | 
			
		||||
{
 | 
			
		||||
    if (a && a->data && !(a->flags & ASN1_STRING_FLAG_NDEF))
 | 
			
		||||
        OPENSSL_cleanse(a->data, a->length);
 | 
			
		||||
    ASN1_STRING_free(a);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b)
 | 
			
		||||
{
 | 
			
		||||
    int i;
 | 
			
		||||
 
 | 
			
		||||
@@ -62,6 +62,10 @@
 | 
			
		||||
#include <openssl/objects.h>
 | 
			
		||||
#include <openssl/asn1.h>
 | 
			
		||||
 | 
			
		||||
#ifndef ASN1_PARSE_MAXDEPTH
 | 
			
		||||
#define ASN1_PARSE_MAXDEPTH 128
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static int asn1_print_info(BIO *bp, int tag, int xclass, int constructed,
 | 
			
		||||
                           int indent);
 | 
			
		||||
static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,
 | 
			
		||||
@@ -128,6 +132,12 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,
 | 
			
		||||
#else
 | 
			
		||||
    dump_indent = 6;            /* Because we know BIO_dump_indent() */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (depth > ASN1_PARSE_MAXDEPTH) {
 | 
			
		||||
            BIO_puts(bp, "BAD RECURSION DEPTH\n");
 | 
			
		||||
            return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    p = *pp;
 | 
			
		||||
    tot = p + length;
 | 
			
		||||
    op = p - 1;
 | 
			
		||||
@@ -337,7 +347,7 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,
 | 
			
		||||
                            goto end;
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    if (BIO_write(bp, "BAD ENUMERATED", 11) <= 0)
 | 
			
		||||
                    if (BIO_write(bp, "BAD ENUMERATED", 14) <= 0)
 | 
			
		||||
                        goto end;
 | 
			
		||||
                }
 | 
			
		||||
                M_ASN1_ENUMERATED_free(bs);
 | 
			
		||||
 
 | 
			
		||||
@@ -289,7 +289,8 @@ int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags,
 | 
			
		||||
    if ((flags & SMIME_DETACHED) && data) {
 | 
			
		||||
        /* We want multipart/signed */
 | 
			
		||||
        /* Generate a random boundary */
 | 
			
		||||
        RAND_pseudo_bytes((unsigned char *)bound, 32);
 | 
			
		||||
        if (RAND_pseudo_bytes((unsigned char *)bound, 32) < 0)
 | 
			
		||||
            return 0;
 | 
			
		||||
        for (i = 0; i < 32; i++) {
 | 
			
		||||
            c = bound[i] & 0xf;
 | 
			
		||||
            if (c < 10)
 | 
			
		||||
 
 | 
			
		||||
@@ -162,6 +162,9 @@ static int ndef_prefix(BIO *b, unsigned char **pbuf, int *plen, void *parg)
 | 
			
		||||
 | 
			
		||||
    derlen = ASN1_item_ndef_i2d(ndef_aux->val, NULL, ndef_aux->it);
 | 
			
		||||
    p = OPENSSL_malloc(derlen);
 | 
			
		||||
    if (!p)
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
    ndef_aux->derbuf = p;
 | 
			
		||||
    *pbuf = p;
 | 
			
		||||
    derlen = ASN1_item_ndef_i2d(ndef_aux->val, &p, ndef_aux->it);
 | 
			
		||||
@@ -229,6 +232,9 @@ static int ndef_suffix(BIO *b, unsigned char **pbuf, int *plen, void *parg)
 | 
			
		||||
 | 
			
		||||
    derlen = ASN1_item_ndef_i2d(ndef_aux->val, NULL, ndef_aux->it);
 | 
			
		||||
    p = OPENSSL_malloc(derlen);
 | 
			
		||||
    if (!p)
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
    ndef_aux->derbuf = p;
 | 
			
		||||
    *pbuf = p;
 | 
			
		||||
    derlen = ASN1_item_ndef_i2d(ndef_aux->val, &p, ndef_aux->it);
 | 
			
		||||
 
 | 
			
		||||
@@ -72,6 +72,7 @@ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
                         long length)
 | 
			
		||||
{
 | 
			
		||||
    EVP_PKEY *ret;
 | 
			
		||||
    const unsigned char *p = *pp;
 | 
			
		||||
 | 
			
		||||
    if ((a == NULL) || (*a == NULL)) {
 | 
			
		||||
        if ((ret = EVP_PKEY_new()) == NULL) {
 | 
			
		||||
@@ -94,21 +95,23 @@ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!ret->ameth->old_priv_decode ||
 | 
			
		||||
        !ret->ameth->old_priv_decode(ret, pp, length)) {
 | 
			
		||||
        !ret->ameth->old_priv_decode(ret, &p, length)) {
 | 
			
		||||
        if (ret->ameth->priv_decode) {
 | 
			
		||||
            PKCS8_PRIV_KEY_INFO *p8 = NULL;
 | 
			
		||||
            p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, pp, length);
 | 
			
		||||
            p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, length);
 | 
			
		||||
            if (!p8)
 | 
			
		||||
                goto err;
 | 
			
		||||
            EVP_PKEY_free(ret);
 | 
			
		||||
            ret = EVP_PKCS82PKEY(p8);
 | 
			
		||||
            PKCS8_PRIV_KEY_INFO_free(p8);
 | 
			
		||||
 | 
			
		||||
            if (ret == NULL)
 | 
			
		||||
                goto err;
 | 
			
		||||
        } else {
 | 
			
		||||
            ASN1err(ASN1_F_D2I_PRIVATEKEY, ERR_R_ASN1_LIB);
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    *pp = p;
 | 
			
		||||
    if (a != NULL)
 | 
			
		||||
        (*a) = ret;
 | 
			
		||||
    return (ret);
 | 
			
		||||
@@ -136,6 +139,7 @@ EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
     * input is surrounded by an ASN1 SEQUENCE.
 | 
			
		||||
     */
 | 
			
		||||
    inkey = d2i_ASN1_SEQUENCE_ANY(NULL, &p, length);
 | 
			
		||||
    p = *pp;
 | 
			
		||||
    /*
 | 
			
		||||
     * Since we only need to discern "traditional format" RSA and DSA keys we
 | 
			
		||||
     * can just count the elements.
 | 
			
		||||
@@ -146,7 +150,7 @@ EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
        keytype = EVP_PKEY_EC;
 | 
			
		||||
    else if (sk_ASN1_TYPE_num(inkey) == 3) { /* This seems to be PKCS8, not
 | 
			
		||||
                                              * traditional format */
 | 
			
		||||
        PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, pp, length);
 | 
			
		||||
        PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, length);
 | 
			
		||||
        EVP_PKEY *ret;
 | 
			
		||||
 | 
			
		||||
        sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free);
 | 
			
		||||
@@ -157,6 +161,9 @@ EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
        }
 | 
			
		||||
        ret = EVP_PKCS82PKEY(p8);
 | 
			
		||||
        PKCS8_PRIV_KEY_INFO_free(p8);
 | 
			
		||||
        if (ret == NULL)
 | 
			
		||||
            return NULL;
 | 
			
		||||
        *pp = p;
 | 
			
		||||
        if (a) {
 | 
			
		||||
            *a = ret;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,8 @@ static int pkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
 | 
			
		||||
    /* Since the structure must still be valid use ASN1_OP_FREE_PRE */
 | 
			
		||||
    if (operation == ASN1_OP_FREE_PRE) {
 | 
			
		||||
        PKCS8_PRIV_KEY_INFO *key = (PKCS8_PRIV_KEY_INFO *)*pval;
 | 
			
		||||
        if (key->pkey->value.octet_string)
 | 
			
		||||
        if (key->pkey && key->pkey->type == V_ASN1_OCTET_STRING
 | 
			
		||||
            && key->pkey->value.octet_string != NULL)
 | 
			
		||||
            OPENSSL_cleanse(key->pkey->value.octet_string->data,
 | 
			
		||||
                            key->pkey->value.octet_string->length);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -164,7 +164,7 @@ int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!(cflag & X509_FLAG_NO_SIGNAME)) {
 | 
			
		||||
        if (X509_signature_print(bp, x->sig_alg, NULL) <= 0)
 | 
			
		||||
        if (X509_signature_print(bp, ci->signature, NULL) <= 0)
 | 
			
		||||
            goto err;
 | 
			
		||||
#if 0
 | 
			
		||||
        if (BIO_printf(bp, "%8sSignature Algorithm: ", "") <= 0)
 | 
			
		||||
 
 | 
			
		||||
@@ -180,6 +180,8 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
 | 
			
		||||
    int otag;
 | 
			
		||||
    int ret = 0;
 | 
			
		||||
    ASN1_VALUE **pchptr, *ptmpval;
 | 
			
		||||
    int combine = aclass & ASN1_TFLG_COMBINE;
 | 
			
		||||
    aclass &= ~ASN1_TFLG_COMBINE;
 | 
			
		||||
    if (!pval)
 | 
			
		||||
        return 0;
 | 
			
		||||
    if (aux && aux->asn1_cb)
 | 
			
		||||
@@ -304,9 +306,16 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
 | 
			
		||||
    case ASN1_ITYPE_CHOICE:
 | 
			
		||||
        if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL))
 | 
			
		||||
            goto auxerr;
 | 
			
		||||
 | 
			
		||||
        /* Allocate structure */
 | 
			
		||||
        if (!*pval && !ASN1_item_ex_new(pval, it)) {
 | 
			
		||||
        if (*pval) {
 | 
			
		||||
            /* Free up and zero CHOICE value if initialised */
 | 
			
		||||
            i = asn1_get_choice_selector(pval, it);
 | 
			
		||||
            if ((i >= 0) && (i < it->tcount)) {
 | 
			
		||||
                tt = it->templates + i;
 | 
			
		||||
                pchptr = asn1_get_field_ptr(pval, tt);
 | 
			
		||||
                ASN1_template_free(pchptr, tt);
 | 
			
		||||
                asn1_set_choice_selector(pval, -1, it);
 | 
			
		||||
            }
 | 
			
		||||
        } else if (!ASN1_item_ex_new(pval, it)) {
 | 
			
		||||
            ASN1err(ASN1_F_ASN1_ITEM_EX_D2I, ERR_R_NESTED_ASN1_ERROR);
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
@@ -343,9 +352,9 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        asn1_set_choice_selector(pval, i, it);
 | 
			
		||||
        *in = p;
 | 
			
		||||
        if (asn1_cb && !asn1_cb(ASN1_OP_D2I_POST, pval, it, NULL))
 | 
			
		||||
            goto auxerr;
 | 
			
		||||
        *in = p;
 | 
			
		||||
        return 1;
 | 
			
		||||
 | 
			
		||||
    case ASN1_ITYPE_NDEF_SEQUENCE:
 | 
			
		||||
@@ -386,6 +395,17 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
 | 
			
		||||
        if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL))
 | 
			
		||||
            goto auxerr;
 | 
			
		||||
 | 
			
		||||
        /* Free up and zero any ADB found */
 | 
			
		||||
        for (i = 0, tt = it->templates; i < it->tcount; i++, tt++) {
 | 
			
		||||
            if (tt->flags & ASN1_TFLG_ADB_MASK) {
 | 
			
		||||
                const ASN1_TEMPLATE *seqtt;
 | 
			
		||||
                ASN1_VALUE **pseqval;
 | 
			
		||||
                seqtt = asn1_do_adb(pval, tt, 1);
 | 
			
		||||
                pseqval = asn1_get_field_ptr(pval, seqtt);
 | 
			
		||||
                ASN1_template_free(pseqval, seqtt);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Get each field entry */
 | 
			
		||||
        for (i = 0, tt = it->templates; i < it->tcount; i++, tt++) {
 | 
			
		||||
            const ASN1_TEMPLATE *seqtt;
 | 
			
		||||
@@ -471,9 +491,9 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
 | 
			
		||||
        /* Save encoding */
 | 
			
		||||
        if (!asn1_enc_save(pval, *in, p - *in, it))
 | 
			
		||||
            goto auxerr;
 | 
			
		||||
        *in = p;
 | 
			
		||||
        if (asn1_cb && !asn1_cb(ASN1_OP_D2I_POST, pval, it, NULL))
 | 
			
		||||
            goto auxerr;
 | 
			
		||||
        *in = p;
 | 
			
		||||
        return 1;
 | 
			
		||||
 | 
			
		||||
    default:
 | 
			
		||||
@@ -482,7 +502,8 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
 | 
			
		||||
 auxerr:
 | 
			
		||||
    ASN1err(ASN1_F_ASN1_ITEM_EX_D2I, ASN1_R_AUX_ERROR);
 | 
			
		||||
 err:
 | 
			
		||||
    ASN1_item_ex_free(pval, it);
 | 
			
		||||
    if (combine == 0)
 | 
			
		||||
        ASN1_item_ex_free(pval, it);
 | 
			
		||||
    if (errtt)
 | 
			
		||||
        ERR_add_error_data(4, "Field=", errtt->field_name,
 | 
			
		||||
                           ", Type=", it->sname);
 | 
			
		||||
@@ -671,7 +692,7 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val,
 | 
			
		||||
    } else {
 | 
			
		||||
        /* Nothing special */
 | 
			
		||||
        ret = ASN1_item_ex_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item),
 | 
			
		||||
                               -1, 0, opt, ctx);
 | 
			
		||||
                               -1, tt->flags & ASN1_TFLG_COMBINE, opt, ctx);
 | 
			
		||||
        if (!ret) {
 | 
			
		||||
            ASN1err(ASN1_F_ASN1_TEMPLATE_NOEXP_D2I, ERR_R_NESTED_ASN1_ERROR);
 | 
			
		||||
            goto err;
 | 
			
		||||
 
 | 
			
		||||
@@ -100,9 +100,6 @@ static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it,
 | 
			
		||||
    else
 | 
			
		||||
        asn1_cb = 0;
 | 
			
		||||
 | 
			
		||||
    if (!combine)
 | 
			
		||||
        *pval = NULL;
 | 
			
		||||
 | 
			
		||||
#ifdef CRYPTO_MDEBUG
 | 
			
		||||
    if (it->sname)
 | 
			
		||||
        CRYPTO_push_info(it->sname);
 | 
			
		||||
@@ -315,13 +312,16 @@ int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it)
 | 
			
		||||
    ASN1_STRING *str;
 | 
			
		||||
    int utype;
 | 
			
		||||
 | 
			
		||||
    if (it && it->funcs) {
 | 
			
		||||
    if (!it)
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
    if (it->funcs) {
 | 
			
		||||
        const ASN1_PRIMITIVE_FUNCS *pf = it->funcs;
 | 
			
		||||
        if (pf->prim_new)
 | 
			
		||||
            return pf->prim_new(pval, it);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!it || (it->itype == ASN1_ITYPE_MSTRING))
 | 
			
		||||
    if (it->itype == ASN1_ITYPE_MSTRING)
 | 
			
		||||
        utype = -1;
 | 
			
		||||
    else
 | 
			
		||||
        utype = it->utype;
 | 
			
		||||
 
 | 
			
		||||
@@ -220,6 +220,7 @@ static int asn1_item_print_ctx(BIO *out, ASN1_VALUE **fld, int indent,
 | 
			
		||||
            if (!asn1_template_print_ctx(out, fld, indent,
 | 
			
		||||
                                         it->templates, pctx))
 | 
			
		||||
                return 0;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        /* fall thru */
 | 
			
		||||
    case ASN1_ITYPE_MSTRING:
 | 
			
		||||
@@ -289,6 +290,8 @@ static int asn1_item_print_ctx(BIO *out, ASN1_VALUE **fld, int indent,
 | 
			
		||||
        for (i = 0, tt = it->templates; i < it->tcount; i++, tt++) {
 | 
			
		||||
            const ASN1_TEMPLATE *seqtt;
 | 
			
		||||
            seqtt = asn1_do_adb(fld, tt, 1);
 | 
			
		||||
            if (!seqtt)
 | 
			
		||||
                return 0;
 | 
			
		||||
            tmpfld = asn1_get_field_ptr(fld, seqtt);
 | 
			
		||||
            if (!asn1_template_print_ctx(out, tmpfld,
 | 
			
		||||
                                         indent + 2, seqtt, pctx))
 | 
			
		||||
 
 | 
			
		||||
@@ -98,46 +98,56 @@ ASN1_ITEM_end(CBIGNUM)
 | 
			
		||||
 | 
			
		||||
static int bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
        *pval = (ASN1_VALUE *)BN_new();
 | 
			
		||||
        if(*pval) return 1;
 | 
			
		||||
        else return 0;
 | 
			
		||||
    *pval = (ASN1_VALUE *)BN_new();
 | 
			
		||||
    if (*pval)
 | 
			
		||||
        return 1;
 | 
			
		||||
    else
 | 
			
		||||
        return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
        if(!*pval) return;
 | 
			
		||||
        if(it->size & BN_SENSITIVE) BN_clear_free((BIGNUM *)*pval);
 | 
			
		||||
        else BN_free((BIGNUM *)*pval);
 | 
			
		||||
        *pval = NULL;
 | 
			
		||||
    if (!*pval)
 | 
			
		||||
        return;
 | 
			
		||||
    if (it->size & BN_SENSITIVE)
 | 
			
		||||
        BN_clear_free((BIGNUM *)*pval);
 | 
			
		||||
    else
 | 
			
		||||
        BN_free((BIGNUM *)*pval);
 | 
			
		||||
    *pval = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it)
 | 
			
		||||
static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype,
 | 
			
		||||
                  const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
        BIGNUM *bn;
 | 
			
		||||
        int pad;
 | 
			
		||||
        if(!*pval) return -1;
 | 
			
		||||
        bn = (BIGNUM *)*pval;
 | 
			
		||||
        /* If MSB set in an octet we need a padding byte */
 | 
			
		||||
        if(BN_num_bits(bn) & 0x7) pad = 0;
 | 
			
		||||
        else pad = 1;
 | 
			
		||||
        if(cont) {
 | 
			
		||||
                if(pad) *cont++ = 0;
 | 
			
		||||
                BN_bn2bin(bn, cont);
 | 
			
		||||
        }
 | 
			
		||||
        return pad + BN_num_bytes(bn);
 | 
			
		||||
    BIGNUM *bn;
 | 
			
		||||
    int pad;
 | 
			
		||||
    if (!*pval)
 | 
			
		||||
        return -1;
 | 
			
		||||
    bn = (BIGNUM *)*pval;
 | 
			
		||||
    /* If MSB set in an octet we need a padding byte */
 | 
			
		||||
    if (BN_num_bits(bn) & 0x7)
 | 
			
		||||
        pad = 0;
 | 
			
		||||
    else
 | 
			
		||||
        pad = 1;
 | 
			
		||||
    if (cont) {
 | 
			
		||||
        if (pad)
 | 
			
		||||
            *cont++ = 0;
 | 
			
		||||
        BN_bn2bin(bn, cont);
 | 
			
		||||
    }
 | 
			
		||||
    return pad + BN_num_bytes(bn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len,
 | 
			
		||||
                  int utype, char *free_cont, const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
        BIGNUM *bn;
 | 
			
		||||
        if(!*pval) bn_new(pval, it);
 | 
			
		||||
        bn  = (BIGNUM *)*pval;
 | 
			
		||||
        if(!BN_bin2bn(cont, len, bn)) {
 | 
			
		||||
                bn_free(pval, it);
 | 
			
		||||
                return 0;
 | 
			
		||||
        }
 | 
			
		||||
        return 1;
 | 
			
		||||
    BIGNUM *bn;
 | 
			
		||||
 | 
			
		||||
    if (*pval == NULL && !bn_new(pval, it))
 | 
			
		||||
        return 0;
 | 
			
		||||
    bn = (BIGNUM *)*pval;
 | 
			
		||||
    if (!BN_bin2bn(cont, len, bn)) {
 | 
			
		||||
        bn_free(pval, it);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -97,87 +97,100 @@ ASN1_ITEM_end(ZLONG)
 | 
			
		||||
 | 
			
		||||
static int long_new(ASN1_VALUE **pval, const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
        *(long *)pval = it->size;
 | 
			
		||||
        return 1;
 | 
			
		||||
    *(long *)pval = it->size;
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void long_free(ASN1_VALUE **pval, const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
        *(long *)pval = it->size;
 | 
			
		||||
    *(long *)pval = it->size;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it)
 | 
			
		||||
static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype,
 | 
			
		||||
                    const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
        long ltmp;
 | 
			
		||||
        unsigned long utmp;
 | 
			
		||||
        int clen, pad, i;
 | 
			
		||||
        /* this exists to bypass broken gcc optimization */
 | 
			
		||||
        char *cp = (char *)pval;
 | 
			
		||||
    long ltmp;
 | 
			
		||||
    unsigned long utmp;
 | 
			
		||||
    int clen, pad, i;
 | 
			
		||||
    /* this exists to bypass broken gcc optimization */
 | 
			
		||||
    char *cp = (char *)pval;
 | 
			
		||||
 | 
			
		||||
        /* use memcpy, because we may not be long aligned */
 | 
			
		||||
        memcpy(<mp, cp, sizeof(long));
 | 
			
		||||
    /* use memcpy, because we may not be long aligned */
 | 
			
		||||
    memcpy(<mp, cp, sizeof(long));
 | 
			
		||||
 | 
			
		||||
        if(ltmp == it->size) return -1;
 | 
			
		||||
        /* Convert the long to positive: we subtract one if negative so
 | 
			
		||||
         * we can cleanly handle the padding if only the MSB of the leading
 | 
			
		||||
         * octet is set.
 | 
			
		||||
         */
 | 
			
		||||
        if(ltmp < 0) utmp = -ltmp - 1;
 | 
			
		||||
        else utmp = ltmp;
 | 
			
		||||
        clen = BN_num_bits_word(utmp);
 | 
			
		||||
        /* If MSB of leading octet set we need to pad */
 | 
			
		||||
        if(!(clen & 0x7)) pad = 1;
 | 
			
		||||
        else pad = 0;
 | 
			
		||||
    if (ltmp == it->size)
 | 
			
		||||
        return -1;
 | 
			
		||||
    /*
 | 
			
		||||
     * Convert the long to positive: we subtract one if negative so we can
 | 
			
		||||
     * cleanly handle the padding if only the MSB of the leading octet is
 | 
			
		||||
     * set.
 | 
			
		||||
     */
 | 
			
		||||
    if (ltmp < 0)
 | 
			
		||||
        utmp = -ltmp - 1;
 | 
			
		||||
    else
 | 
			
		||||
        utmp = ltmp;
 | 
			
		||||
    clen = BN_num_bits_word(utmp);
 | 
			
		||||
    /* If MSB of leading octet set we need to pad */
 | 
			
		||||
    if (!(clen & 0x7))
 | 
			
		||||
        pad = 1;
 | 
			
		||||
    else
 | 
			
		||||
        pad = 0;
 | 
			
		||||
 | 
			
		||||
        /* Convert number of bits to number of octets */
 | 
			
		||||
        clen = (clen + 7) >> 3;
 | 
			
		||||
    /* Convert number of bits to number of octets */
 | 
			
		||||
    clen = (clen + 7) >> 3;
 | 
			
		||||
 | 
			
		||||
        if(cont) {
 | 
			
		||||
                if(pad) *cont++ = (ltmp < 0) ? 0xff : 0;
 | 
			
		||||
                for(i = clen - 1; i >= 0; i--) {
 | 
			
		||||
                        cont[i] = (unsigned char)(utmp & 0xff);
 | 
			
		||||
                        if(ltmp < 0) cont[i] ^= 0xff;
 | 
			
		||||
                        utmp >>= 8;
 | 
			
		||||
                }
 | 
			
		||||
    if (cont) {
 | 
			
		||||
        if (pad)
 | 
			
		||||
            *cont++ = (ltmp < 0) ? 0xff : 0;
 | 
			
		||||
        for (i = clen - 1; i >= 0; i--) {
 | 
			
		||||
            cont[i] = (unsigned char)(utmp & 0xff);
 | 
			
		||||
            if (ltmp < 0)
 | 
			
		||||
                cont[i] ^= 0xff;
 | 
			
		||||
            utmp >>= 8;
 | 
			
		||||
        }
 | 
			
		||||
        return clen + pad;
 | 
			
		||||
    }
 | 
			
		||||
    return clen + pad;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len,
 | 
			
		||||
                    int utype, char *free_cont, const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
        int neg, i;
 | 
			
		||||
        long ltmp;
 | 
			
		||||
        unsigned long utmp = 0;
 | 
			
		||||
        char *cp = (char *)pval;
 | 
			
		||||
        if(len > (int)sizeof(long)) {
 | 
			
		||||
                ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG);
 | 
			
		||||
                return 0;
 | 
			
		||||
        }
 | 
			
		||||
        /* Is it negative? */
 | 
			
		||||
        if(len && (cont[0] & 0x80)) neg = 1;
 | 
			
		||||
        else neg = 0;
 | 
			
		||||
        utmp = 0;
 | 
			
		||||
        for(i = 0; i < len; i++) {
 | 
			
		||||
                utmp <<= 8;
 | 
			
		||||
                if(neg) utmp |= cont[i] ^ 0xff;
 | 
			
		||||
                else utmp |= cont[i];
 | 
			
		||||
        }
 | 
			
		||||
        ltmp = (long)utmp;
 | 
			
		||||
        if(neg) {
 | 
			
		||||
                ltmp++;
 | 
			
		||||
                ltmp = -ltmp;
 | 
			
		||||
        }
 | 
			
		||||
        if(ltmp == it->size) {
 | 
			
		||||
                ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG);
 | 
			
		||||
                return 0;
 | 
			
		||||
        }
 | 
			
		||||
        memcpy(cp, <mp, sizeof(long));
 | 
			
		||||
        return 1;
 | 
			
		||||
    int neg, i;
 | 
			
		||||
    long ltmp;
 | 
			
		||||
    unsigned long utmp = 0;
 | 
			
		||||
    char *cp = (char *)pval;
 | 
			
		||||
    if (len > (int)sizeof(long)) {
 | 
			
		||||
        ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    /* Is it negative? */
 | 
			
		||||
    if (len && (cont[0] & 0x80))
 | 
			
		||||
        neg = 1;
 | 
			
		||||
    else
 | 
			
		||||
        neg = 0;
 | 
			
		||||
    utmp = 0;
 | 
			
		||||
    for (i = 0; i < len; i++) {
 | 
			
		||||
        utmp <<= 8;
 | 
			
		||||
        if (neg)
 | 
			
		||||
            utmp |= cont[i] ^ 0xff;
 | 
			
		||||
        else
 | 
			
		||||
            utmp |= cont[i];
 | 
			
		||||
    }
 | 
			
		||||
    ltmp = (long)utmp;
 | 
			
		||||
    if (neg) {
 | 
			
		||||
        ltmp++;
 | 
			
		||||
        ltmp = -ltmp;
 | 
			
		||||
    }
 | 
			
		||||
    if (ltmp == it->size) {
 | 
			
		||||
        ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
    memcpy(cp, <mp, sizeof(long));
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int long_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it,
 | 
			
		||||
                        int indent, const ASN1_PCTX *pctx)
 | 
			
		||||
        {
 | 
			
		||||
        return BIO_printf(out, "%ld\n", *(long *)pval);
 | 
			
		||||
        }
 | 
			
		||||
                      int indent, const ASN1_PCTX *pctx)
 | 
			
		||||
{
 | 
			
		||||
    return BIO_printf(out, "%ld\n", *(long *)pval);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -188,13 +188,16 @@ EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length)
 | 
			
		||||
{
 | 
			
		||||
    X509_PUBKEY *xpk;
 | 
			
		||||
    EVP_PKEY *pktmp;
 | 
			
		||||
    xpk = d2i_X509_PUBKEY(NULL, pp, length);
 | 
			
		||||
    const unsigned char *q;
 | 
			
		||||
    q = *pp;
 | 
			
		||||
    xpk = d2i_X509_PUBKEY(NULL, &q, length);
 | 
			
		||||
    if (!xpk)
 | 
			
		||||
        return NULL;
 | 
			
		||||
    pktmp = X509_PUBKEY_get(xpk);
 | 
			
		||||
    X509_PUBKEY_free(xpk);
 | 
			
		||||
    if (!pktmp)
 | 
			
		||||
        return NULL;
 | 
			
		||||
    *pp = q;
 | 
			
		||||
    if (a) {
 | 
			
		||||
        EVP_PKEY_free(*a);
 | 
			
		||||
        *a = pktmp;
 | 
			
		||||
 
 | 
			
		||||
@@ -172,21 +172,30 @@ X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length)
 | 
			
		||||
{
 | 
			
		||||
    const unsigned char *q;
 | 
			
		||||
    X509 *ret;
 | 
			
		||||
    int freeret = 0;
 | 
			
		||||
 | 
			
		||||
    /* Save start position */
 | 
			
		||||
    q = *pp;
 | 
			
		||||
    ret = d2i_X509(a, pp, length);
 | 
			
		||||
 | 
			
		||||
    if (!a || *a == NULL) {
 | 
			
		||||
        freeret = 1;
 | 
			
		||||
    }
 | 
			
		||||
    ret = d2i_X509(a, &q, length);
 | 
			
		||||
    /* If certificate unreadable then forget it */
 | 
			
		||||
    if (!ret)
 | 
			
		||||
        return NULL;
 | 
			
		||||
    /* update length */
 | 
			
		||||
    length -= *pp - q;
 | 
			
		||||
    if (!length)
 | 
			
		||||
        return ret;
 | 
			
		||||
    if (!d2i_X509_CERT_AUX(&ret->aux, pp, length))
 | 
			
		||||
    length -= q - *pp;
 | 
			
		||||
    if (length > 0 && !d2i_X509_CERT_AUX(&ret->aux, &q, length))
 | 
			
		||||
        goto err;
 | 
			
		||||
    *pp = q;
 | 
			
		||||
    return ret;
 | 
			
		||||
 err:
 | 
			
		||||
    X509_free(ret);
 | 
			
		||||
    if (freeret) {
 | 
			
		||||
        X509_free(ret);
 | 
			
		||||
        if (a)
 | 
			
		||||
            *a = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +0,0 @@
 | 
			
		||||
lib
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
bf-*.s
 | 
			
		||||
@@ -72,6 +72,8 @@ tests:
 | 
			
		||||
lint:
 | 
			
		||||
	lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
			
		||||
 | 
			
		||||
update: depend
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
 | 
			
		||||
	$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
bx86unix.cpp
 | 
			
		||||
bx86-elf.s
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
@@ -1,4 +0,0 @@
 | 
			
		||||
lib
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
@@ -73,6 +73,8 @@ tests:
 | 
			
		||||
lint:
 | 
			
		||||
	lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
			
		||||
 | 
			
		||||
update: depend
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
 | 
			
		||||
	$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
			
		||||
 
 | 
			
		||||
@@ -104,7 +104,6 @@ int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u),
 | 
			
		||||
    if ((rows * dump_width) < len)
 | 
			
		||||
        rows++;
 | 
			
		||||
    for (i = 0; i < rows; i++) {
 | 
			
		||||
        buf[0] = '\0';          /* start with empty string */
 | 
			
		||||
        BUF_strlcpy(buf, str, sizeof buf);
 | 
			
		||||
        BIO_snprintf(tmp, sizeof tmp, "%04x - ", i * dump_width);
 | 
			
		||||
        BUF_strlcat(buf, tmp, sizeof buf);
 | 
			
		||||
 
 | 
			
		||||
@@ -592,7 +592,6 @@ fmtfp(char **sbuffer,
 | 
			
		||||
    int fplace = 0;
 | 
			
		||||
    int padlen = 0;
 | 
			
		||||
    int zpadlen = 0;
 | 
			
		||||
    int caps = 0;
 | 
			
		||||
    long intpart;
 | 
			
		||||
    long fracpart;
 | 
			
		||||
    long max10;
 | 
			
		||||
@@ -630,8 +629,7 @@ fmtfp(char **sbuffer,
 | 
			
		||||
 | 
			
		||||
    /* convert integer part */
 | 
			
		||||
    do {
 | 
			
		||||
        iconvert[iplace++] =
 | 
			
		||||
            (caps ? "0123456789ABCDEF" : "0123456789abcdef")[intpart % 10];
 | 
			
		||||
        iconvert[iplace++] = "0123456789"[intpart % 10];
 | 
			
		||||
        intpart = (intpart / 10);
 | 
			
		||||
    } while (intpart && (iplace < (int)sizeof(iconvert)));
 | 
			
		||||
    if (iplace == sizeof iconvert)
 | 
			
		||||
@@ -640,8 +638,7 @@ fmtfp(char **sbuffer,
 | 
			
		||||
 | 
			
		||||
    /* convert fractional part */
 | 
			
		||||
    do {
 | 
			
		||||
        fconvert[fplace++] =
 | 
			
		||||
            (caps ? "0123456789ABCDEF" : "0123456789abcdef")[fracpart % 10];
 | 
			
		||||
        fconvert[fplace++] = "0123456789"[fracpart % 10];
 | 
			
		||||
        fracpart = (fracpart / 10);
 | 
			
		||||
    } while (fplace < max);
 | 
			
		||||
    if (fplace == sizeof fconvert)
 | 
			
		||||
@@ -707,24 +704,29 @@ doapr_outch(char **sbuffer,
 | 
			
		||||
    /* If we haven't at least one buffer, someone has doe a big booboo */
 | 
			
		||||
    assert(*sbuffer != NULL || buffer != NULL);
 | 
			
		||||
 | 
			
		||||
    if (buffer) {
 | 
			
		||||
        while (*currlen >= *maxlen) {
 | 
			
		||||
            if (*buffer == NULL) {
 | 
			
		||||
                if (*maxlen == 0)
 | 
			
		||||
                    *maxlen = 1024;
 | 
			
		||||
                *buffer = OPENSSL_malloc(*maxlen);
 | 
			
		||||
                if (*currlen > 0) {
 | 
			
		||||
                    assert(*sbuffer != NULL);
 | 
			
		||||
                    memcpy(*buffer, *sbuffer, *currlen);
 | 
			
		||||
                }
 | 
			
		||||
                *sbuffer = NULL;
 | 
			
		||||
            } else {
 | 
			
		||||
                *maxlen += 1024;
 | 
			
		||||
                *buffer = OPENSSL_realloc(*buffer, *maxlen);
 | 
			
		||||
    /* |currlen| must always be <= |*maxlen| */
 | 
			
		||||
    assert(*currlen <= *maxlen);
 | 
			
		||||
 | 
			
		||||
    if (buffer && *currlen == *maxlen) {
 | 
			
		||||
        *maxlen += 1024;
 | 
			
		||||
        if (*buffer == NULL) {
 | 
			
		||||
            *buffer = OPENSSL_malloc(*maxlen);
 | 
			
		||||
            if (!*buffer) {
 | 
			
		||||
                /* Panic! Can't really do anything sensible. Just return */
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (*currlen > 0) {
 | 
			
		||||
                assert(*sbuffer != NULL);
 | 
			
		||||
                memcpy(*buffer, *sbuffer, *currlen);
 | 
			
		||||
            }
 | 
			
		||||
            *sbuffer = NULL;
 | 
			
		||||
        } else {
 | 
			
		||||
            *buffer = OPENSSL_realloc(*buffer, *maxlen);
 | 
			
		||||
            if (!*buffer) {
 | 
			
		||||
                /* Panic! Can't really do anything sensible. Just return */
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        /* What to do if *buffer is NULL? */
 | 
			
		||||
        assert(*sbuffer != NULL || *buffer != NULL);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (*currlen < *maxlen) {
 | 
			
		||||
 
 | 
			
		||||
@@ -139,7 +139,8 @@ static int nbiof_read(BIO *b, char *out, int outl)
 | 
			
		||||
 | 
			
		||||
    BIO_clear_retry_flags(b);
 | 
			
		||||
#if 1
 | 
			
		||||
    RAND_pseudo_bytes(&n, 1);
 | 
			
		||||
    if (RAND_pseudo_bytes(&n, 1) < 0)
 | 
			
		||||
        return -1;
 | 
			
		||||
    num = (n & 0x07);
 | 
			
		||||
 | 
			
		||||
    if (outl > num)
 | 
			
		||||
@@ -178,7 +179,8 @@ static int nbiof_write(BIO *b, const char *in, int inl)
 | 
			
		||||
        num = nt->lwn;
 | 
			
		||||
        nt->lwn = 0;
 | 
			
		||||
    } else {
 | 
			
		||||
        RAND_pseudo_bytes(&n, 1);
 | 
			
		||||
        if (RAND_pseudo_bytes(&n, 1) < 0)
 | 
			
		||||
            return -1;
 | 
			
		||||
        num = (n & 7);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -290,7 +290,7 @@ void BIO_clear_flags(BIO *b, int flags);
 | 
			
		||||
 * BIO_CB_RETURN flag indicates if it is after the call
 | 
			
		||||
 */
 | 
			
		||||
# define BIO_CB_RETURN   0x80
 | 
			
		||||
# define BIO_CB_return(a) ((a)|BIO_CB_RETURN))
 | 
			
		||||
# define BIO_CB_return(a) ((a)|BIO_CB_RETURN)
 | 
			
		||||
# define BIO_cb_pre(a)   (!((a)&BIO_CB_RETURN))
 | 
			
		||||
# define BIO_cb_post(a)  ((a)&BIO_CB_RETURN)
 | 
			
		||||
 | 
			
		||||
@@ -829,6 +829,7 @@ void ERR_load_BIO_strings(void);
 | 
			
		||||
# define BIO_F_CONN_CTRL                                  127
 | 
			
		||||
# define BIO_F_CONN_STATE                                 115
 | 
			
		||||
# define BIO_F_DGRAM_SCTP_READ                            132
 | 
			
		||||
# define BIO_F_DGRAM_SCTP_WRITE                           133
 | 
			
		||||
# define BIO_F_FILE_CTRL                                  116
 | 
			
		||||
# define BIO_F_FILE_READ                                  130
 | 
			
		||||
# define BIO_F_LINEBUFFER_CTRL                            129
 | 
			
		||||
 
 | 
			
		||||
@@ -70,14 +70,17 @@ long MS_CALLBACK BIO_debug_callback(BIO *bio, int cmd, const char *argp,
 | 
			
		||||
    MS_STATIC char buf[256];
 | 
			
		||||
    char *p;
 | 
			
		||||
    long r = 1;
 | 
			
		||||
    int len;
 | 
			
		||||
    size_t p_maxlen;
 | 
			
		||||
 | 
			
		||||
    if (BIO_CB_RETURN & cmd)
 | 
			
		||||
        r = ret;
 | 
			
		||||
 | 
			
		||||
    BIO_snprintf(buf, sizeof buf, "BIO[%08lX]:", (unsigned long)bio);
 | 
			
		||||
    p = &(buf[14]);
 | 
			
		||||
    p_maxlen = sizeof buf - 14;
 | 
			
		||||
    len = BIO_snprintf(buf,sizeof buf,"BIO[%p]: ",(void *)bio);
 | 
			
		||||
 | 
			
		||||
    p = buf + len;
 | 
			
		||||
    p_maxlen = sizeof(buf) - len;
 | 
			
		||||
 | 
			
		||||
    switch (cmd) {
 | 
			
		||||
    case BIO_CB_FREE:
 | 
			
		||||
        BIO_snprintf(p, p_maxlen, "Free - %s\n", bio->method->name);
 | 
			
		||||
 
 | 
			
		||||
@@ -96,6 +96,7 @@ static ERR_STRING_DATA BIO_str_functs[] = {
 | 
			
		||||
    {ERR_FUNC(BIO_F_CONN_CTRL), "CONN_CTRL"},
 | 
			
		||||
    {ERR_FUNC(BIO_F_CONN_STATE), "CONN_STATE"},
 | 
			
		||||
    {ERR_FUNC(BIO_F_DGRAM_SCTP_READ), "DGRAM_SCTP_READ"},
 | 
			
		||||
    {ERR_FUNC(BIO_F_DGRAM_SCTP_WRITE), "DGRAM_SCTP_WRITE"},
 | 
			
		||||
    {ERR_FUNC(BIO_F_FILE_CTRL), "FILE_CTRL"},
 | 
			
		||||
    {ERR_FUNC(BIO_F_FILE_READ), "FILE_READ"},
 | 
			
		||||
    {ERR_FUNC(BIO_F_LINEBUFFER_CTRL), "LINEBUFFER_CTRL"},
 | 
			
		||||
 
 | 
			
		||||
@@ -536,8 +536,10 @@ BIO *BIO_dup_chain(BIO *in)
 | 
			
		||||
 | 
			
		||||
        /* copy app data */
 | 
			
		||||
        if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_BIO, &new_bio->ex_data,
 | 
			
		||||
                                &bio->ex_data))
 | 
			
		||||
                                &bio->ex_data)) {
 | 
			
		||||
            BIO_free(new_bio);
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (ret == NULL) {
 | 
			
		||||
            eoc = new_bio;
 | 
			
		||||
@@ -549,8 +551,8 @@ BIO *BIO_dup_chain(BIO *in)
 | 
			
		||||
    }
 | 
			
		||||
    return (ret);
 | 
			
		||||
 err:
 | 
			
		||||
    if (ret != NULL)
 | 
			
		||||
        BIO_free(ret);
 | 
			
		||||
    BIO_free_all(ret);
 | 
			
		||||
 | 
			
		||||
    return (NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -299,16 +299,17 @@ static void dgram_adjust_rcv_timeout(BIO *b)
 | 
			
		||||
 | 
			
		||||
        /* Calculate time left until timer expires */
 | 
			
		||||
        memcpy(&timeleft, &(data->next_timeout), sizeof(struct timeval));
 | 
			
		||||
        timeleft.tv_sec -= timenow.tv_sec;
 | 
			
		||||
        timeleft.tv_usec -= timenow.tv_usec;
 | 
			
		||||
        if (timeleft.tv_usec < 0) {
 | 
			
		||||
        if (timeleft.tv_usec < timenow.tv_usec) {
 | 
			
		||||
            timeleft.tv_usec = 1000000 - timenow.tv_usec + timeleft.tv_usec;
 | 
			
		||||
            timeleft.tv_sec--;
 | 
			
		||||
            timeleft.tv_usec += 1000000;
 | 
			
		||||
        } else {
 | 
			
		||||
            timeleft.tv_usec -= timenow.tv_usec;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (timeleft.tv_sec < 0) {
 | 
			
		||||
        if (timeleft.tv_sec < timenow.tv_sec) {
 | 
			
		||||
            timeleft.tv_sec = 0;
 | 
			
		||||
            timeleft.tv_usec = 1;
 | 
			
		||||
        } else {
 | 
			
		||||
            timeleft.tv_sec -= timenow.tv_sec;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
@@ -953,6 +954,10 @@ BIO *BIO_new_dgram_sctp(int fd, int close_flag)
 | 
			
		||||
     */
 | 
			
		||||
    sockopt_len = (socklen_t) (sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t));
 | 
			
		||||
    authchunks = OPENSSL_malloc(sockopt_len);
 | 
			
		||||
    if (!authchunks) {
 | 
			
		||||
        BIO_vfree(bio);
 | 
			
		||||
        return (NULL);
 | 
			
		||||
    }
 | 
			
		||||
    memset(authchunks, 0, sizeof(sockopt_len));
 | 
			
		||||
    ret =
 | 
			
		||||
        getsockopt(fd, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, authchunks,
 | 
			
		||||
@@ -1288,6 +1293,10 @@ static int dgram_sctp_read(BIO *b, char *out, int outl)
 | 
			
		||||
            optlen =
 | 
			
		||||
                (socklen_t) (sizeof(sctp_assoc_t) + 256 * sizeof(uint8_t));
 | 
			
		||||
            authchunks = OPENSSL_malloc(optlen);
 | 
			
		||||
            if (!authchunks) {
 | 
			
		||||
                BIOerr(BIO_F_DGRAM_SCTP_READ, ERR_R_MALLOC_FAILURE);
 | 
			
		||||
                return -1;
 | 
			
		||||
            }
 | 
			
		||||
            memset(authchunks, 0, sizeof(optlen));
 | 
			
		||||
            ii = getsockopt(b->num, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS,
 | 
			
		||||
                            authchunks, &optlen);
 | 
			
		||||
@@ -1354,10 +1363,15 @@ static int dgram_sctp_write(BIO *b, const char *in, int inl)
 | 
			
		||||
     * yet, we have to save it and send it as soon as the socket gets dry.
 | 
			
		||||
     */
 | 
			
		||||
    if (data->save_shutdown && !BIO_dgram_sctp_wait_for_dry(b)) {
 | 
			
		||||
        char *tmp;
 | 
			
		||||
        data->saved_message.bio = b;
 | 
			
		||||
        if (!(tmp = OPENSSL_malloc(inl))) {
 | 
			
		||||
            BIOerr(BIO_F_DGRAM_SCTP_WRITE, ERR_R_MALLOC_FAILURE);
 | 
			
		||||
            return -1;
 | 
			
		||||
        }
 | 
			
		||||
        if (data->saved_message.data)
 | 
			
		||||
            OPENSSL_free(data->saved_message.data);
 | 
			
		||||
        data->saved_message.data = OPENSSL_malloc(inl);
 | 
			
		||||
        data->saved_message.data = tmp;
 | 
			
		||||
        memcpy(data->saved_message.data, in, inl);
 | 
			
		||||
        data->saved_message.length = inl;
 | 
			
		||||
        return inl;
 | 
			
		||||
 
 | 
			
		||||
@@ -115,9 +115,8 @@ static BIO_METHOD methods_filep = {
 | 
			
		||||
    NULL,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
BIO *BIO_new_file(const char *filename, const char *mode)
 | 
			
		||||
static FILE *file_fopen(const char *filename, const char *mode)
 | 
			
		||||
{
 | 
			
		||||
    BIO *ret;
 | 
			
		||||
    FILE *file = NULL;
 | 
			
		||||
 | 
			
		||||
#  if defined(_WIN32) && defined(CP_UTF8)
 | 
			
		||||
@@ -164,6 +163,14 @@ BIO *BIO_new_file(const char *filename, const char *mode)
 | 
			
		||||
#  else
 | 
			
		||||
    file = fopen(filename, mode);
 | 
			
		||||
#  endif
 | 
			
		||||
    return (file);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BIO *BIO_new_file(const char *filename, const char *mode)
 | 
			
		||||
{
 | 
			
		||||
    BIO  *ret;
 | 
			
		||||
    FILE *file = file_fopen(filename, mode);
 | 
			
		||||
 | 
			
		||||
    if (file == NULL) {
 | 
			
		||||
        SYSerr(SYS_F_FOPEN, get_last_sys_error());
 | 
			
		||||
        ERR_add_error_data(5, "fopen('", filename, "','", mode, "')");
 | 
			
		||||
@@ -386,7 +393,7 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr)
 | 
			
		||||
        else
 | 
			
		||||
            strcat(p, "t");
 | 
			
		||||
#  endif
 | 
			
		||||
        fp = fopen(ptr, p);
 | 
			
		||||
        fp = file_fopen(ptr, p);
 | 
			
		||||
        if (fp == NULL) {
 | 
			
		||||
            SYSerr(SYS_F_FOPEN, get_last_sys_error());
 | 
			
		||||
            ERR_add_error_data(5, "fopen('", ptr, "','", p, "')");
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +0,0 @@
 | 
			
		||||
lib
 | 
			
		||||
Makefile.save
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
co-*.s
 | 
			
		||||
bn-*.s
 | 
			
		||||
*-mont.s
 | 
			
		||||
@@ -167,6 +167,8 @@ tests:
 | 
			
		||||
lint:
 | 
			
		||||
	lint -DLINT $(INCLUDES) $(SRC)>fluff
 | 
			
		||||
 | 
			
		||||
update: bn_prime.h depend
 | 
			
		||||
 | 
			
		||||
depend:
 | 
			
		||||
	@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
 | 
			
		||||
	$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
bn86unix.cpp
 | 
			
		||||
co86unix.cpp
 | 
			
		||||
bn86-elf.s
 | 
			
		||||
co86-elf.s
 | 
			
		||||
*.flc
 | 
			
		||||
semantic.cache
 | 
			
		||||
@@ -41,13 +41,13 @@ $code=<<___;
 | 
			
		||||
.align	5
 | 
			
		||||
mul_1x1_neon:
 | 
			
		||||
	vshl.u64	`&Dlo("q1")`,d16,#8	@ q1-q3 are slided $a
 | 
			
		||||
	vmull.p8	`&Q("d0")`,d16,d17	@ a<EFBFBD>bb
 | 
			
		||||
	vmull.p8	`&Q("d0")`,d16,d17	@ a·bb
 | 
			
		||||
	vshl.u64	`&Dlo("q2")`,d16,#16
 | 
			
		||||
	vmull.p8	q1,`&Dlo("q1")`,d17	@ a<<8<EFBFBD>bb
 | 
			
		||||
	vmull.p8	q1,`&Dlo("q1")`,d17	@ a<<8·bb
 | 
			
		||||
	vshl.u64	`&Dlo("q3")`,d16,#24
 | 
			
		||||
	vmull.p8	q2,`&Dlo("q2")`,d17	@ a<<16<EFBFBD>bb
 | 
			
		||||
	vmull.p8	q2,`&Dlo("q2")`,d17	@ a<<16·bb
 | 
			
		||||
	vshr.u64	`&Dlo("q1")`,#8
 | 
			
		||||
	vmull.p8	q3,`&Dlo("q3")`,d17	@ a<<24<EFBFBD>bb
 | 
			
		||||
	vmull.p8	q3,`&Dlo("q3")`,d17	@ a<<24·bb
 | 
			
		||||
	vshl.u64	`&Dhi("q1")`,#24
 | 
			
		||||
	veor		d0,`&Dlo("q1")`
 | 
			
		||||
	vshr.u64	`&Dlo("q2")`,#16
 | 
			
		||||
@@ -158,7 +158,7 @@ ___
 | 
			
		||||
################
 | 
			
		||||
# void	bn_GF2m_mul_2x2(BN_ULONG *r,
 | 
			
		||||
#	BN_ULONG a1,BN_ULONG a0,
 | 
			
		||||
#	BN_ULONG b1,BN_ULONG b0);	# r[3..0]=a1a0<EFBFBD>b1b0
 | 
			
		||||
#	BN_ULONG b1,BN_ULONG b0);	# r[3..0]=a1a0·b1b0
 | 
			
		||||
 | 
			
		||||
($A1,$B1,$A0,$B0,$A1B1,$A0B0)=map("d$_",(18..23));
 | 
			
		||||
 | 
			
		||||
@@ -184,20 +184,20 @@ bn_GF2m_mul_2x2:
 | 
			
		||||
 | 
			
		||||
	vmov	d16,$A1
 | 
			
		||||
	vmov	d17,$B1
 | 
			
		||||
	bl	mul_1x1_neon		@ a1<EFBFBD>b1
 | 
			
		||||
	bl	mul_1x1_neon		@ a1·b1
 | 
			
		||||
	vmov	$A1B1,d0
 | 
			
		||||
 | 
			
		||||
	vmov	d16,$A0
 | 
			
		||||
	vmov	d17,$B0
 | 
			
		||||
	bl	mul_1x1_neon		@ a0<EFBFBD>b0
 | 
			
		||||
	bl	mul_1x1_neon		@ a0·b0
 | 
			
		||||
	vmov	$A0B0,d0
 | 
			
		||||
 | 
			
		||||
	veor	d16,$A0,$A1
 | 
			
		||||
	veor	d17,$B0,$B1
 | 
			
		||||
	veor	$A0,$A0B0,$A1B1
 | 
			
		||||
	bl	mul_1x1_neon		@ (a0+a1)<EFBFBD>(b0+b1)
 | 
			
		||||
	bl	mul_1x1_neon		@ (a0+a1)·(b0+b1)
 | 
			
		||||
 | 
			
		||||
	veor	d0,$A0			@ (a0+a1)<EFBFBD>(b0+b1)-a0<EFBFBD>b0-a1<EFBFBD>b1
 | 
			
		||||
	veor	d0,$A0			@ (a0+a1)·(b0+b1)-a0·b0-a1·b1
 | 
			
		||||
	vshl.u64 d1,d0,#32
 | 
			
		||||
	vshr.u64 d0,d0,#32
 | 
			
		||||
	veor	$A0B0,d1
 | 
			
		||||
@@ -220,7 +220,7 @@ $code.=<<___;
 | 
			
		||||
	mov	$mask,#7<<2
 | 
			
		||||
	sub	sp,sp,#32		@ allocate tab[8]
 | 
			
		||||
 | 
			
		||||
	bl	mul_1x1_ialu		@ a1<EFBFBD>b1
 | 
			
		||||
	bl	mul_1x1_ialu		@ a1·b1
 | 
			
		||||
	str	$lo,[$ret,#8]
 | 
			
		||||
	str	$hi,[$ret,#12]
 | 
			
		||||
 | 
			
		||||
@@ -230,13 +230,13 @@ $code.=<<___;
 | 
			
		||||
	 eor	r2,r2,$a
 | 
			
		||||
	eor	$b,$b,r3
 | 
			
		||||
	 eor	$a,$a,r2
 | 
			
		||||
	bl	mul_1x1_ialu		@ a0<EFBFBD>b0
 | 
			
		||||
	bl	mul_1x1_ialu		@ a0·b0
 | 
			
		||||
	str	$lo,[$ret]
 | 
			
		||||
	str	$hi,[$ret,#4]
 | 
			
		||||
 | 
			
		||||
	eor	$a,$a,r2
 | 
			
		||||
	eor	$b,$b,r3
 | 
			
		||||
	bl	mul_1x1_ialu		@ (a1+a0)<EFBFBD>(b1+b0)
 | 
			
		||||
	bl	mul_1x1_ialu		@ (a1+a0)·(b1+b0)
 | 
			
		||||
___
 | 
			
		||||
@r=map("r$_",(6..9));
 | 
			
		||||
$code.=<<___;
 | 
			
		||||
 
 | 
			
		||||
@@ -422,7 +422,7 @@ bn_mul_add_words:
 | 
			
		||||
 | 
			
		||||
// This loop spins in 3*(n+10) ticks on Itanium and in 2*(n+10) on
 | 
			
		||||
// Itanium 2. Yes, unlike previous versions it scales:-) Previous
 | 
			
		||||
// version was peforming *all* additions in IALU and was starving
 | 
			
		||||
// version was performing *all* additions in IALU and was starving
 | 
			
		||||
// for those even on Itanium 2. In this version one addition is
 | 
			
		||||
// moved to FPU and is folded with multiplication. This is at cost
 | 
			
		||||
// of propogating the result from previous call to this subroutine
 | 
			
		||||
@@ -568,7 +568,7 @@ bn_sqr_comba8:
 | 
			
		||||
// I've estimated this routine to run in ~120 ticks, but in reality
 | 
			
		||||
// (i.e. according to ar.itc) it takes ~160 ticks. Are those extra
 | 
			
		||||
// cycles consumed for instructions fetch? Or did I misinterpret some
 | 
			
		||||
// clause in Itanium <EFBFBD>-architecture manual? Comments are welcomed and
 | 
			
		||||
// clause in Itanium µ-architecture manual? Comments are welcomed and
 | 
			
		||||
// highly appreciated.
 | 
			
		||||
//
 | 
			
		||||
// On Itanium 2 it takes ~190 ticks. This is because of stalls on
 | 
			
		||||
 
 | 
			
		||||
@@ -172,19 +172,19 @@ ___
 | 
			
		||||
if ($SIZE_T==8) {
 | 
			
		||||
my @r=map("%r$_",(6..9));
 | 
			
		||||
$code.=<<___;
 | 
			
		||||
	bras	$ra,_mul_1x1			# a1<EFBFBD>b1
 | 
			
		||||
	bras	$ra,_mul_1x1			# a1·b1
 | 
			
		||||
	stmg	$lo,$hi,16($rp)
 | 
			
		||||
 | 
			
		||||
	lg	$a,`$stdframe+128+4*$SIZE_T`($sp)
 | 
			
		||||
	lg	$b,`$stdframe+128+6*$SIZE_T`($sp)
 | 
			
		||||
	bras	$ra,_mul_1x1			# a0<EFBFBD>b0
 | 
			
		||||
	bras	$ra,_mul_1x1			# a0·b0
 | 
			
		||||
	stmg	$lo,$hi,0($rp)
 | 
			
		||||
 | 
			
		||||
	lg	$a,`$stdframe+128+3*$SIZE_T`($sp)
 | 
			
		||||
	lg	$b,`$stdframe+128+5*$SIZE_T`($sp)
 | 
			
		||||
	xg	$a,`$stdframe+128+4*$SIZE_T`($sp)
 | 
			
		||||
	xg	$b,`$stdframe+128+6*$SIZE_T`($sp)
 | 
			
		||||
	bras	$ra,_mul_1x1			# (a0+a1)<EFBFBD>(b0+b1)
 | 
			
		||||
	bras	$ra,_mul_1x1			# (a0+a1)·(b0+b1)
 | 
			
		||||
	lmg	@r[0],@r[3],0($rp)
 | 
			
		||||
 | 
			
		||||
	xgr	$lo,$hi
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@
 | 
			
		||||
# the time being... Except that it has three code paths: pure integer
 | 
			
		||||
# code suitable for any x86 CPU, MMX code suitable for PIII and later
 | 
			
		||||
# and PCLMULQDQ suitable for Westmere and later. Improvement varies
 | 
			
		||||
# from one benchmark and <EFBFBD>-arch to another. Below are interval values
 | 
			
		||||
# from one benchmark and µ-arch to another. Below are interval values
 | 
			
		||||
# for 163- and 571-bit ECDH benchmarks relative to compiler-generated
 | 
			
		||||
# code:
 | 
			
		||||
#
 | 
			
		||||
@@ -226,22 +226,22 @@ if ($sse2) {
 | 
			
		||||
	&push	("edi");
 | 
			
		||||
	&mov	($a,&wparam(1));
 | 
			
		||||
	&mov	($b,&wparam(3));
 | 
			
		||||
	&call	("_mul_1x1_mmx");	# a1<EFBFBD>b1
 | 
			
		||||
	&call	("_mul_1x1_mmx");	# a1·b1
 | 
			
		||||
	&movq	("mm7",$R);
 | 
			
		||||
 | 
			
		||||
	&mov	($a,&wparam(2));
 | 
			
		||||
	&mov	($b,&wparam(4));
 | 
			
		||||
	&call	("_mul_1x1_mmx");	# a0<EFBFBD>b0
 | 
			
		||||
	&call	("_mul_1x1_mmx");	# a0·b0
 | 
			
		||||
	&movq	("mm6",$R);
 | 
			
		||||
 | 
			
		||||
	&mov	($a,&wparam(1));
 | 
			
		||||
	&mov	($b,&wparam(3));
 | 
			
		||||
	&xor	($a,&wparam(2));
 | 
			
		||||
	&xor	($b,&wparam(4));
 | 
			
		||||
	&call	("_mul_1x1_mmx");	# (a0+a1)<EFBFBD>(b0+b1)
 | 
			
		||||
	&call	("_mul_1x1_mmx");	# (a0+a1)·(b0+b1)
 | 
			
		||||
	&pxor	($R,"mm7");
 | 
			
		||||
	&mov	($a,&wparam(0));
 | 
			
		||||
	&pxor	($R,"mm6");		# (a0+a1)<EFBFBD>(b0+b1)-a1<EFBFBD>b1-a0<EFBFBD>b0
 | 
			
		||||
	&pxor	($R,"mm6");		# (a0+a1)·(b0+b1)-a1·b1-a0·b0
 | 
			
		||||
 | 
			
		||||
	&movq	($A,$R);
 | 
			
		||||
	&psllq	($R,32);
 | 
			
		||||
@@ -266,13 +266,13 @@ if ($sse2) {
 | 
			
		||||
 | 
			
		||||
	&mov	($a,&wparam(1));
 | 
			
		||||
	&mov	($b,&wparam(3));
 | 
			
		||||
	&call	("_mul_1x1_ialu");	# a1<EFBFBD>b1
 | 
			
		||||
	&call	("_mul_1x1_ialu");	# a1·b1
 | 
			
		||||
	&mov	(&DWP(8,"esp"),$lo);
 | 
			
		||||
	&mov	(&DWP(12,"esp"),$hi);
 | 
			
		||||
 | 
			
		||||
	&mov	($a,&wparam(2));
 | 
			
		||||
	&mov	($b,&wparam(4));
 | 
			
		||||
	&call	("_mul_1x1_ialu");	# a0<EFBFBD>b0
 | 
			
		||||
	&call	("_mul_1x1_ialu");	# a0·b0
 | 
			
		||||
	&mov	(&DWP(0,"esp"),$lo);
 | 
			
		||||
	&mov	(&DWP(4,"esp"),$hi);
 | 
			
		||||
 | 
			
		||||
@@ -280,7 +280,7 @@ if ($sse2) {
 | 
			
		||||
	&mov	($b,&wparam(3));
 | 
			
		||||
	&xor	($a,&wparam(2));
 | 
			
		||||
	&xor	($b,&wparam(4));
 | 
			
		||||
	&call	("_mul_1x1_ialu");	# (a0+a1)<EFBFBD>(b0+b1)
 | 
			
		||||
	&call	("_mul_1x1_ialu");	# (a0+a1)·(b0+b1)
 | 
			
		||||
 | 
			
		||||
	&mov	("ebp",&wparam(0));
 | 
			
		||||
		 @r=("ebx","ecx","edi","esi");
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@
 | 
			
		||||
# undef sqr
 | 
			
		||||
 | 
			
		||||
/*-
 | 
			
		||||
 * "m"(a), "+m"(r)      is the way to favor DirectPath <EFBFBD>-code;
 | 
			
		||||
 * "m"(a), "+m"(r)      is the way to favor DirectPath µ-code;
 | 
			
		||||
 * "g"(0)               let the compiler to decide where does it
 | 
			
		||||
 *                      want to keep the value of zero;
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@
 | 
			
		||||
# in bn_gf2m.c. It's kind of low-hanging mechanical port from C for
 | 
			
		||||
# the time being... Except that it has two code paths: code suitable
 | 
			
		||||
# for any x86_64 CPU and PCLMULQDQ one suitable for Westmere and
 | 
			
		||||
# later. Improvement varies from one benchmark and <EFBFBD>-arch to another.
 | 
			
		||||
# later. Improvement varies from one benchmark and µ-arch to another.
 | 
			
		||||
# Vanilla code path is at most 20% faster than compiler-generated code
 | 
			
		||||
# [not very impressive], while PCLMULQDQ - whole 85%-160% better on
 | 
			
		||||
# 163- and 571-bit ECDH benchmarks on Intel CPUs. Keep in mind that
 | 
			
		||||
@@ -184,13 +184,13 @@ ___
 | 
			
		||||
$code.=<<___;
 | 
			
		||||
	movdqa		%xmm0,%xmm4
 | 
			
		||||
	movdqa		%xmm1,%xmm5
 | 
			
		||||
	pclmulqdq	\$0,%xmm1,%xmm0	# a1<EFBFBD>b1
 | 
			
		||||
	pclmulqdq	\$0,%xmm1,%xmm0	# a1·b1
 | 
			
		||||
	pxor		%xmm2,%xmm4
 | 
			
		||||
	pxor		%xmm3,%xmm5
 | 
			
		||||
	pclmulqdq	\$0,%xmm3,%xmm2	# a0<EFBFBD>b0
 | 
			
		||||
	pclmulqdq	\$0,%xmm5,%xmm4	# (a0+a1)<EFBFBD>(b0+b1)
 | 
			
		||||
	pclmulqdq	\$0,%xmm3,%xmm2	# a0·b0
 | 
			
		||||
	pclmulqdq	\$0,%xmm5,%xmm4	# (a0+a1)·(b0+b1)
 | 
			
		||||
	xorps		%xmm0,%xmm4
 | 
			
		||||
	xorps		%xmm2,%xmm4	# (a0+a1)<EFBFBD>(b0+b1)-a0<EFBFBD>b0-a1<EFBFBD>b1
 | 
			
		||||
	xorps		%xmm2,%xmm4	# (a0+a1)·(b0+b1)-a0·b0-a1·b1
 | 
			
		||||
	movdqa		%xmm4,%xmm5
 | 
			
		||||
	pslldq		\$8,%xmm4
 | 
			
		||||
	psrldq		\$8,%xmm5
 | 
			
		||||
@@ -225,13 +225,13 @@ $code.=<<___;
 | 
			
		||||
	mov	\$0xf,$mask
 | 
			
		||||
	mov	$a1,$a
 | 
			
		||||
	mov	$b1,$b
 | 
			
		||||
	call	_mul_1x1		# a1<EFBFBD>b1
 | 
			
		||||
	call	_mul_1x1		# a1·b1
 | 
			
		||||
	mov	$lo,16(%rsp)
 | 
			
		||||
	mov	$hi,24(%rsp)
 | 
			
		||||
 | 
			
		||||
	mov	48(%rsp),$a
 | 
			
		||||
	mov	64(%rsp),$b
 | 
			
		||||
	call	_mul_1x1		# a0<EFBFBD>b0
 | 
			
		||||
	call	_mul_1x1		# a0·b0
 | 
			
		||||
	mov	$lo,0(%rsp)
 | 
			
		||||
	mov	$hi,8(%rsp)
 | 
			
		||||
 | 
			
		||||
@@ -239,7 +239,7 @@ $code.=<<___;
 | 
			
		||||
	mov	56(%rsp),$b
 | 
			
		||||
	xor	48(%rsp),$a
 | 
			
		||||
	xor	64(%rsp),$b
 | 
			
		||||
	call	_mul_1x1		# (a0+a1)<EFBFBD>(b0+b1)
 | 
			
		||||
	call	_mul_1x1		# (a0+a1)·(b0+b1)
 | 
			
		||||
___
 | 
			
		||||
	@r=("%rbx","%rcx","%rdi","%rsi");
 | 
			
		||||
$code.=<<___;
 | 
			
		||||
 
 | 
			
		||||
@@ -797,6 +797,7 @@ int RAND_pseudo_bytes(unsigned char *buf, int num);
 | 
			
		||||
                         * wouldn't be constructed with top!=dmax. */ \
 | 
			
		||||
                        BN_ULONG *_not_const; \
 | 
			
		||||
                        memcpy(&_not_const, &_bnum1->d, sizeof(BN_ULONG*)); \
 | 
			
		||||
                        /* Debug only - safe to ignore error return */ \
 | 
			
		||||
                        RAND_pseudo_bytes(&_tmp_char, 1); \
 | 
			
		||||
                        memset((unsigned char *)(_not_const + _bnum1->top), _tmp_char, \
 | 
			
		||||
                                (_bnum1->dmax - _bnum1->top) * sizeof(BN_ULONG)); \
 | 
			
		||||
@@ -910,6 +911,7 @@ void ERR_load_BN_strings(void);
 | 
			
		||||
# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR                  135
 | 
			
		||||
# define BN_F_BN_GF2M_MOD_SQR                             136
 | 
			
		||||
# define BN_F_BN_GF2M_MOD_SQRT                            137
 | 
			
		||||
# define BN_F_BN_LSHIFT                                   145
 | 
			
		||||
# define BN_F_BN_MOD_EXP2_MONT                            118
 | 
			
		||||
# define BN_F_BN_MOD_EXP_MONT                             109
 | 
			
		||||
# define BN_F_BN_MOD_EXP_MONT_CONSTTIME                   124
 | 
			
		||||
@@ -925,12 +927,14 @@ void ERR_load_BN_strings(void);
 | 
			
		||||
# define BN_F_BN_NEW                                      113
 | 
			
		||||
# define BN_F_BN_RAND                                     114
 | 
			
		||||
# define BN_F_BN_RAND_RANGE                               122
 | 
			
		||||
# define BN_F_BN_RSHIFT                                   146
 | 
			
		||||
# define BN_F_BN_USUB                                     115
 | 
			
		||||
 | 
			
		||||
/* Reason codes. */
 | 
			
		||||
# define BN_R_ARG2_LT_ARG3                                100
 | 
			
		||||
# define BN_R_BAD_RECIPROCAL                              101
 | 
			
		||||
# define BN_R_BIGNUM_TOO_LONG                             114
 | 
			
		||||
# define BN_R_BITS_TOO_SMALL                              118
 | 
			
		||||
# define BN_R_CALLED_WITH_EVEN_MODULUS                    102
 | 
			
		||||
# define BN_R_DIV_BY_ZERO                                 103
 | 
			
		||||
# define BN_R_ENCODING_ERROR                              104
 | 
			
		||||
@@ -938,6 +942,7 @@ void ERR_load_BN_strings(void);
 | 
			
		||||
# define BN_R_INPUT_NOT_REDUCED                           110
 | 
			
		||||
# define BN_R_INVALID_LENGTH                              106
 | 
			
		||||
# define BN_R_INVALID_RANGE                               115
 | 
			
		||||
# define BN_R_INVALID_SHIFT                               119
 | 
			
		||||
# define BN_R_NOT_A_SQUARE                                111
 | 
			
		||||
# define BN_R_NOT_INITIALIZED                             107
 | 
			
		||||
# define BN_R_NO_INVERSE                                  108
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/* crypto/bn/bn_err.c */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999-2007 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1999-2015 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
 | 
			
		||||
@@ -94,6 +94,7 @@ static ERR_STRING_DATA BN_str_functs[] = {
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR), "BN_GF2m_mod_solve_quad_arr"},
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_GF2M_MOD_SQR), "BN_GF2m_mod_sqr"},
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_GF2M_MOD_SQRT), "BN_GF2m_mod_sqrt"},
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_LSHIFT), "BN_lshift"},
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_MOD_EXP2_MONT), "BN_mod_exp2_mont"},
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_MOD_EXP_MONT), "BN_mod_exp_mont"},
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_MOD_EXP_MONT_CONSTTIME), "BN_mod_exp_mont_consttime"},
 | 
			
		||||
@@ -109,6 +110,7 @@ static ERR_STRING_DATA BN_str_functs[] = {
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_NEW), "BN_new"},
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_RAND), "BN_rand"},
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_RAND_RANGE), "BN_rand_range"},
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_RSHIFT), "BN_rshift"},
 | 
			
		||||
    {ERR_FUNC(BN_F_BN_USUB), "BN_usub"},
 | 
			
		||||
    {0, NULL}
 | 
			
		||||
};
 | 
			
		||||
@@ -117,6 +119,7 @@ static ERR_STRING_DATA BN_str_reasons[] = {
 | 
			
		||||
    {ERR_REASON(BN_R_ARG2_LT_ARG3), "arg2 lt arg3"},
 | 
			
		||||
    {ERR_REASON(BN_R_BAD_RECIPROCAL), "bad reciprocal"},
 | 
			
		||||
    {ERR_REASON(BN_R_BIGNUM_TOO_LONG), "bignum too long"},
 | 
			
		||||
    {ERR_REASON(BN_R_BITS_TOO_SMALL), "bits too small"},
 | 
			
		||||
    {ERR_REASON(BN_R_CALLED_WITH_EVEN_MODULUS), "called with even modulus"},
 | 
			
		||||
    {ERR_REASON(BN_R_DIV_BY_ZERO), "div by zero"},
 | 
			
		||||
    {ERR_REASON(BN_R_ENCODING_ERROR), "encoding error"},
 | 
			
		||||
@@ -125,6 +128,7 @@ static ERR_STRING_DATA BN_str_reasons[] = {
 | 
			
		||||
    {ERR_REASON(BN_R_INPUT_NOT_REDUCED), "input not reduced"},
 | 
			
		||||
    {ERR_REASON(BN_R_INVALID_LENGTH), "invalid length"},
 | 
			
		||||
    {ERR_REASON(BN_R_INVALID_RANGE), "invalid range"},
 | 
			
		||||
    {ERR_REASON(BN_R_INVALID_SHIFT), "invalid shift"},
 | 
			
		||||
    {ERR_REASON(BN_R_NOT_A_SQUARE), "not a square"},
 | 
			
		||||
    {ERR_REASON(BN_R_NOT_INITIALIZED), "not initialized"},
 | 
			
		||||
    {ERR_REASON(BN_R_NO_INVERSE), "no inverse"},
 | 
			
		||||
 
 | 
			
		||||
@@ -168,10 +168,10 @@ int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
 | 
			
		||||
                goto err;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    ret = 1;
 | 
			
		||||
 err:
 | 
			
		||||
    if (r != rr)
 | 
			
		||||
        BN_copy(r, rr);
 | 
			
		||||
    ret = 1;
 | 
			
		||||
 err:
 | 
			
		||||
    BN_CTX_end(ctx);
 | 
			
		||||
    bn_check_top(r);
 | 
			
		||||
    return (ret);
 | 
			
		||||
@@ -599,12 +599,13 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
 | 
			
		||||
    bn_check_top(p);
 | 
			
		||||
    bn_check_top(m);
 | 
			
		||||
 | 
			
		||||
    top = m->top;
 | 
			
		||||
 | 
			
		||||
    if (!(m->d[0] & 1)) {
 | 
			
		||||
    if (!BN_is_odd(m)) {
 | 
			
		||||
        BNerr(BN_F_BN_MOD_EXP_MONT_CONSTTIME, BN_R_CALLED_WITH_EVEN_MODULUS);
 | 
			
		||||
        return (0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    top = m->top;
 | 
			
		||||
 | 
			
		||||
    bits = BN_num_bits(p);
 | 
			
		||||
    if (bits == 0) {
 | 
			
		||||
        ret = BN_one(rr);
 | 
			
		||||
 
 | 
			
		||||
@@ -583,6 +583,7 @@ static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
 | 
			
		||||
         * BN_div_no_branch will be called eventually.
 | 
			
		||||
         */
 | 
			
		||||
        pB = &local_B;
 | 
			
		||||
        local_B.flags = 0;
 | 
			
		||||
        BN_with_flags(pB, B, BN_FLG_CONSTTIME);
 | 
			
		||||
        if (!BN_nnmod(B, pB, A, ctx))
 | 
			
		||||
            goto err;
 | 
			
		||||
@@ -610,6 +611,7 @@ static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
 | 
			
		||||
         * BN_div_no_branch will be called eventually.
 | 
			
		||||
         */
 | 
			
		||||
        pA = &local_A;
 | 
			
		||||
        local_A.flags = 0;
 | 
			
		||||
        BN_with_flags(pA, A, BN_FLG_CONSTTIME);
 | 
			
		||||
 | 
			
		||||
        /* (D, M) := (A/B, A%B) ... */
 | 
			
		||||
 
 | 
			
		||||
@@ -576,7 +576,7 @@ int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[],
 | 
			
		||||
    bn_check_top(a);
 | 
			
		||||
    BN_CTX_start(ctx);
 | 
			
		||||
    if ((s = BN_CTX_get(ctx)) == NULL)
 | 
			
		||||
        return 0;
 | 
			
		||||
        goto err;
 | 
			
		||||
    if (!bn_wexpand(s, 2 * a->top))
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
@@ -694,23 +694,27 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
 | 
			
		||||
    }
 | 
			
		||||
# else
 | 
			
		||||
    {
 | 
			
		||||
        int i, ubits = BN_num_bits(u), vbits = BN_num_bits(v), /* v is copy
 | 
			
		||||
                                                                * of p */
 | 
			
		||||
            top = p->top;
 | 
			
		||||
        int i;
 | 
			
		||||
        int ubits = BN_num_bits(u);
 | 
			
		||||
        int vbits = BN_num_bits(v); /* v is copy of p */
 | 
			
		||||
        int top = p->top;
 | 
			
		||||
        BN_ULONG *udp, *bdp, *vdp, *cdp;
 | 
			
		||||
 | 
			
		||||
        bn_wexpand(u, top);
 | 
			
		||||
        if (!bn_wexpand(u, top))
 | 
			
		||||
            goto err;
 | 
			
		||||
        udp = u->d;
 | 
			
		||||
        for (i = u->top; i < top; i++)
 | 
			
		||||
            udp[i] = 0;
 | 
			
		||||
        u->top = top;
 | 
			
		||||
        bn_wexpand(b, top);
 | 
			
		||||
        if (!bn_wexpand(b, top))
 | 
			
		||||
          goto err;
 | 
			
		||||
        bdp = b->d;
 | 
			
		||||
        bdp[0] = 1;
 | 
			
		||||
        for (i = 1; i < top; i++)
 | 
			
		||||
            bdp[i] = 0;
 | 
			
		||||
        b->top = top;
 | 
			
		||||
        bn_wexpand(c, top);
 | 
			
		||||
        if (!bn_wexpand(c, top))
 | 
			
		||||
          goto err;
 | 
			
		||||
        cdp = c->d;
 | 
			
		||||
        for (i = 0; i < top; i++)
 | 
			
		||||
            cdp[i] = 0;
 | 
			
		||||
@@ -740,8 +744,12 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
 | 
			
		||||
                ubits--;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (ubits <= BN_BITS2 && udp[0] == 1)
 | 
			
		||||
                break;
 | 
			
		||||
            if (ubits <= BN_BITS2) {
 | 
			
		||||
                if (udp[0] == 0) /* poly was reducible */
 | 
			
		||||
                    goto err;
 | 
			
		||||
                if (udp[0] == 1)
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (ubits < vbits) {
 | 
			
		||||
                i = ubits;
 | 
			
		||||
 
 | 
			
		||||
@@ -276,7 +276,7 @@ unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b,
 | 
			
		||||
#   endif
 | 
			
		||||
#  elif defined(__mips) && (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG))
 | 
			
		||||
#   if defined(__GNUC__) && __GNUC__>=2
 | 
			
		||||
#    if __GNUC__>=4 && __GNUC_MINOR__>=4
 | 
			
		||||
#    if __GNUC__>4 || (__GNUC__>=4 && __GNUC_MINOR__>=4)
 | 
			
		||||
                                     /* "h" constraint is no more since 4.4 */
 | 
			
		||||
#     define BN_UMULT_HIGH(a,b)          (((__uint128_t)(a)*(b))>>64)
 | 
			
		||||
#     define BN_UMULT_LOHI(low,high,a,b) ({     \
 | 
			
		||||
 
 | 
			
		||||
@@ -361,9 +361,9 @@ void BN_MONT_CTX_free(BN_MONT_CTX *mont)
 | 
			
		||||
    if (mont == NULL)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    BN_free(&(mont->RR));
 | 
			
		||||
    BN_free(&(mont->N));
 | 
			
		||||
    BN_free(&(mont->Ni));
 | 
			
		||||
    BN_clear_free(&(mont->RR));
 | 
			
		||||
    BN_clear_free(&(mont->N));
 | 
			
		||||
    BN_clear_free(&(mont->Ni));
 | 
			
		||||
    if (mont->flags & BN_FLG_MALLOCED)
 | 
			
		||||
        OPENSSL_free(mont);
 | 
			
		||||
}
 | 
			
		||||
@@ -373,6 +373,9 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx)
 | 
			
		||||
    int ret = 0;
 | 
			
		||||
    BIGNUM *Ri, *R;
 | 
			
		||||
 | 
			
		||||
    if (BN_is_zero(mod))
 | 
			
		||||
        return 0;
 | 
			
		||||
 | 
			
		||||
    BN_CTX_start(ctx);
 | 
			
		||||
    if ((Ri = BN_CTX_get(ctx)) == NULL)
 | 
			
		||||
        goto err;
 | 
			
		||||
 
 | 
			
		||||
@@ -71,7 +71,12 @@ char *BN_bn2hex(const BIGNUM *a)
 | 
			
		||||
    char *buf;
 | 
			
		||||
    char *p;
 | 
			
		||||
 | 
			
		||||
    buf = (char *)OPENSSL_malloc(a->top * BN_BYTES * 2 + 2);
 | 
			
		||||
    if (a->neg && BN_is_zero(a)) {
 | 
			
		||||
        /* "-0" == 3 bytes including NULL terminator */
 | 
			
		||||
        buf = OPENSSL_malloc(3);
 | 
			
		||||
    } else {
 | 
			
		||||
        buf = OPENSSL_malloc(a->top * BN_BYTES * 2 + 2);
 | 
			
		||||
    }
 | 
			
		||||
    if (buf == NULL) {
 | 
			
		||||
        BNerr(BN_F_BN_BN2HEX, ERR_R_MALLOC_FAILURE);
 | 
			
		||||
        goto err;
 | 
			
		||||
 
 | 
			
		||||
@@ -121,6 +121,11 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
 | 
			
		||||
    int ret = 0, bit, bytes, mask;
 | 
			
		||||
    time_t tim;
 | 
			
		||||
 | 
			
		||||
    if (bits < 0 || (bits == 1 && top > 0)) {
 | 
			
		||||
        BNerr(BN_F_BNRAND, BN_R_BITS_TOO_SMALL);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (bits == 0) {
 | 
			
		||||
        BN_zero(rnd);
 | 
			
		||||
        return 1;
 | 
			
		||||
@@ -157,7 +162,8 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
 | 
			
		||||
        unsigned char c;
 | 
			
		||||
 | 
			
		||||
        for (i = 0; i < bytes; i++) {
 | 
			
		||||
            RAND_pseudo_bytes(&c, 1);
 | 
			
		||||
            if (RAND_pseudo_bytes(&c, 1) < 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
            if (c >= 128 && i > 0)
 | 
			
		||||
                buf[i] = buf[i - 1];
 | 
			
		||||
            else if (c < 42)
 | 
			
		||||
@@ -168,7 +174,7 @@ static int bnrand(int pseudorand, BIGNUM *rnd, int bits, int top, int bottom)
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (top != -1) {
 | 
			
		||||
    if (top >= 0) {
 | 
			
		||||
        if (top) {
 | 
			
		||||
            if (bit == 0) {
 | 
			
		||||
                buf[0] = 1;
 | 
			
		||||
 
 | 
			
		||||
@@ -152,8 +152,10 @@ int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
 | 
			
		||||
 | 
			
		||||
    if (BN_ucmp(m, &(recp->N)) < 0) {
 | 
			
		||||
        BN_zero(d);
 | 
			
		||||
        if (!BN_copy(r, m))
 | 
			
		||||
        if (!BN_copy(r, m)) {
 | 
			
		||||
            BN_CTX_end(ctx);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
        BN_CTX_end(ctx);
 | 
			
		||||
        return (1);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -137,6 +137,11 @@ int BN_lshift(BIGNUM *r, const BIGNUM *a, int n)
 | 
			
		||||
    bn_check_top(r);
 | 
			
		||||
    bn_check_top(a);
 | 
			
		||||
 | 
			
		||||
    if (n < 0) {
 | 
			
		||||
        BNerr(BN_F_BN_LSHIFT, BN_R_INVALID_SHIFT);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    r->neg = a->neg;
 | 
			
		||||
    nw = n / BN_BITS2;
 | 
			
		||||
    if (bn_wexpand(r, a->top + nw + 1) == NULL)
 | 
			
		||||
@@ -174,6 +179,11 @@ int BN_rshift(BIGNUM *r, const BIGNUM *a, int n)
 | 
			
		||||
    bn_check_top(r);
 | 
			
		||||
    bn_check_top(a);
 | 
			
		||||
 | 
			
		||||
    if (n < 0) {
 | 
			
		||||
        BNerr(BN_F_BN_RSHIFT, BN_R_INVALID_SHIFT);
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    nw = n / BN_BITS2;
 | 
			
		||||
    rb = n % BN_BITS2;
 | 
			
		||||
    lb = BN_BITS2 - rb;
 | 
			
		||||
 
 | 
			
		||||
@@ -213,14 +213,14 @@ int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx)
 | 
			
		||||
     * exceeded.
 | 
			
		||||
     */
 | 
			
		||||
    if (!BN_rand(Xp, nbits, 1, 0))
 | 
			
		||||
        return 0;
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    BN_CTX_start(ctx);
 | 
			
		||||
    t = BN_CTX_get(ctx);
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < 1000; i++) {
 | 
			
		||||
        if (!BN_rand(Xq, nbits, 1, 0))
 | 
			
		||||
            return 0;
 | 
			
		||||
            goto err;
 | 
			
		||||
        /* Check that |Xp - Xq| > 2^(nbits - 100) */
 | 
			
		||||
        BN_sub(t, Xp, Xq);
 | 
			
		||||
        if (BN_num_bits(t) > (nbits - 100))
 | 
			
		||||
@@ -234,6 +234,9 @@ int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx)
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
 | 
			
		||||
 err:
 | 
			
		||||
    BN_CTX_end(ctx);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user