Compare commits
	
		
			57 Commits
		
	
	
		
			OpenSSL-en
			...
			LEVITTE_af
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					828f94d852 | ||
| 
						 | 
					875a644a90 | ||
| 
						 | 
					ec37635c94 | ||
| 
						 | 
					fd836aeee0 | ||
| 
						 | 
					560f7abb7e | ||
| 
						 | 
					b6358c89a1 | ||
| 
						 | 
					5d735465d1 | ||
| 
						 | 
					9e051bac13 | ||
| 
						 | 
					30fbcaa213 | ||
| 
						 | 
					93825dddad | ||
| 
						 | 
					a8aa764d3c | ||
| 
						 | 
					e7716b7a19 | ||
| 
						 | 
					a4e3150f00 | ||
| 
						 | 
					edec614efd | ||
| 
						 | 
					2457c19df1 | ||
| 
						 | 
					5fa5eb71a4 | ||
| 
						 | 
					3f39976da3 | ||
| 
						 | 
					216ad9ef58 | ||
| 
						 | 
					bc50157010 | ||
| 
						 | 
					91180d45f9 | ||
| 
						 | 
					d9f40bbe55 | ||
| 
						 | 
					ec7c9ee8b8 | ||
| 
						 | 
					f82bb9cb9c | ||
| 
						 | 
					5a8922aed5 | ||
| 
						 | 
					f2c1812560 | ||
| 
						 | 
					4cfa4ae820 | ||
| 
						 | 
					a30af36c77 | ||
| 
						 | 
					5075521e75 | ||
| 
						 | 
					ee3a47a994 | ||
| 
						 | 
					f727266ae8 | ||
| 
						 | 
					8bb0c8522a | ||
| 
						 | 
					c6700d2746 | ||
| 
						 | 
					1b06804491 | ||
| 
						 | 
					dc90f64d56 | ||
| 
						 | 
					6c43032121 | ||
| 
						 | 
					37ead9be0b | ||
| 
						 | 
					1751034669 | ||
| 
						 | 
					d4575825f1 | ||
| 
						 | 
					d04b1b4656 | ||
| 
						 | 
					1247092776 | ||
| 
						 | 
					7e22a1df55 | ||
| 
						 | 
					bb5810d21d | ||
| 
						 | 
					61a88c31c0 | ||
| 
						 | 
					b86ed8d18f | ||
| 
						 | 
					e5886a2388 | ||
| 
						 | 
					8d1ebe0bd1 | ||
| 
						 | 
					1fb724449d | ||
| 
						 | 
					721a5e83f9 | ||
| 
						 | 
					6df617a59d | ||
| 
						 | 
					8c6336b0aa | ||
| 
						 | 
					87203dc99a | ||
| 
						 | 
					4de65cbc06 | ||
| 
						 | 
					27b2b78f90 | ||
| 
						 | 
					3a160f1dc6 | ||
| 
						 | 
					7f24b1c3e9 | ||
| 
						 | 
					a5e8bcfb7b | ||
| 
						 | 
					9d5c3c1939 | 
							
								
								
									
										39
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								CHANGES
									
									
									
									
									
								
							@@ -4,6 +4,22 @@
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.7c and 0.9.8  [xx XXX xxxx]
 | 
			
		||||
 | 
			
		||||
  *) Constify all or almost all d2i, c2i, s2i and r2i functions, along with
 | 
			
		||||
     associated ASN1, EVP and SSL functions and old ASN1 macros.
 | 
			
		||||
 | 
			
		||||
  *) BN_zero() only needs to set 'top' and 'neg' to zero for correct results,
 | 
			
		||||
     and this should never fail. So the return value from the use of
 | 
			
		||||
     BN_set_word() (which can fail due to needless expansion) is now deprecated;
 | 
			
		||||
     if OPENSSL_NO_DEPRECATED is defined, BN_zero() is a void macro.
 | 
			
		||||
     [Geoff Thorpe]
 | 
			
		||||
 | 
			
		||||
  *) BN_CTX_get() should return zero-valued bignums, providing the same
 | 
			
		||||
     initialised value as BN_new().
 | 
			
		||||
     [Geoff Thorpe, suggested by Ulf M<>ller]
 | 
			
		||||
 | 
			
		||||
  *) Support for inhibitAnyPolicy certificate extension.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) An audit of the BIGNUM code is underway, for which debugging code is
 | 
			
		||||
     enabled when BN_DEBUG is defined. This makes stricter enforcements on what
 | 
			
		||||
     is considered valid when processing BIGNUMs, and causes execution to
 | 
			
		||||
@@ -18,7 +34,7 @@
 | 
			
		||||
     some point, these tighter rules will become openssl's default to improve
 | 
			
		||||
     maintainability, though the assert()s and other overheads will remain only
 | 
			
		||||
     in debugging configurations. See bn.h for more details.
 | 
			
		||||
     [Geoff Thorpe]
 | 
			
		||||
     [Geoff Thorpe, Nils Larsch, Ulf M<>ller]
 | 
			
		||||
 | 
			
		||||
  *) BN_CTX_init() has been deprecated, as BN_CTX is an opaque structure
 | 
			
		||||
     that can only be obtained through BN_CTX_new() (which implicitly
 | 
			
		||||
@@ -617,6 +633,27 @@
 | 
			
		||||
 | 
			
		||||
 Changes between 0.9.7c and 0.9.7d  [xx XXX XXXX]
 | 
			
		||||
 | 
			
		||||
  *) X509 verify fixes. Disable broken certificate workarounds when 
 | 
			
		||||
     X509_V_FLAGS_X509_STRICT is set. Check CRL issuer has cRLSign set if
 | 
			
		||||
     keyUsage extension present. Don't accept CRLs with unhandled critical
 | 
			
		||||
     extensions: since verify currently doesn't process CRL extensions this
 | 
			
		||||
     rejects a CRL with *any* critical extensions. Add new verify error codes
 | 
			
		||||
     for these cases.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) When creating an OCSP nonce use an OCTET STRING inside the extnValue.
 | 
			
		||||
     A clarification of RFC2560 will require the use of OCTET STRINGs and 
 | 
			
		||||
     some implementations cannot handle the current raw format. Since OpenSSL
 | 
			
		||||
     copies and compares OCSP nonces as opaque blobs without any attempt at
 | 
			
		||||
     parsing them this should not create any compatibility issues.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) New md flag EVP_MD_CTX_FLAG_REUSE this allows md_data to be reused when
 | 
			
		||||
     calling EVP_MD_CTX_copy_ex() to avoid calling OPENSSL_malloc(). Without
 | 
			
		||||
     this HMAC (and other) operations are several times slower than OpenSSL
 | 
			
		||||
     < 0.9.7.
 | 
			
		||||
     [Steve Henson]
 | 
			
		||||
 | 
			
		||||
  *) Print out GeneralizedTime and UTCTime in ASN1_STRING_print_ex().
 | 
			
		||||
     [Peter Sylvester <Peter.Sylvester@EdelWeb.fr>]
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								Configure
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								Configure
									
									
									
									
									
								
							@@ -145,10 +145,10 @@ my %table=(
 | 
			
		||||
"debug-ulf", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DBN_DEBUG_RAND -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations:::CYGWIN32::::win32:cygwin-shared:::.dll",
 | 
			
		||||
"debug-steve",	"gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DPEDANTIC -g -mcpu=i486 -pedantic -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared",
 | 
			
		||||
"debug-steve-linux-pseudo64",	"gcc:-DL_ENDIAN -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG_ALL -DOPENSSL_NO_ASM -g -mcpu=i486 -Wall -Werror -Wshadow -pipe::-D_REENTRANT::-rdynamic -ldl:SIXTY_FOUR_BIT::dlfcn:linux-shared",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wmissing-prototypes -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wmissing-prototypes -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wmissing-prototypes -Wconversion -Wno-long-long -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_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wmissing-prototypes -Wconversion -Wno-long-long -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-elf-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-levitte-linux-noasm-extreme","gcc:-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"debug-geoff","gcc:-DBN_DEBUG -DBN_DEBUG_RAND -DBN_STRICT -DBN_CTX_DEBUG -DPURIFY -DOPENSSL_NO_DEPRECATED -DOPENSSL_NO_ASM -DOPENSSL_NO_INLINE_ASM -DL_ENDIAN -DTERMIO -DPEDANTIC -g -ggdb3 -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 ${x86_gcc_des} ${x86_gcc_opts}::::::::::dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"dist",		"cc:-O::(unknown)::::::",
 | 
			
		||||
 | 
			
		||||
@@ -216,13 +216,13 @@ my %table=(
 | 
			
		||||
"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::::::::::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-[g]cc' manually.
 | 
			
		||||
# './Configure irix-cc -o32' manually.
 | 
			
		||||
# -mips4 flag is added by ./config when appropriate.
 | 
			
		||||
"irix-mips3-gcc","gcc:-mabi=n32 -mmips-as -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:${mips3_irix_asm}:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT:${mips3_irix_asm}:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-mips3-gcc","gcc:-mabi=n32 -mmips-as -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:${mips3_irix_asm}:dlfcn:irix-shared::-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix-mips3-cc", "cc:-n32 -mips3 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::DES_PTR RC4_CHAR RC4_CHUNK_LL DES_RISC2 DES_UNROLL BF_PTR SIXTY_FOUR_BIT:${mips3_irix_asm}:dlfcn:irix-shared::-n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# N64 ABI builds.
 | 
			
		||||
"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -mmips-as -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_irix_asm}:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_irix_asm}:dlfcn:irix-shared:::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix64-mips4-gcc","gcc:-mabi=64 -mips4 -mmips-as -O3 -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_irix_asm}:dlfcn:irix-shared::-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"irix64-mips4-cc", "cc:-64 -mips4 -O2 -use_readonly_const -DTERMIOS -DB_ENDIAN -DBN_DIV3W::-D_SGI_MP_SOURCE:::RC4_CHAR RC4_CHUNK DES_RISC2 DES_UNROLL SIXTY_FOUR_BIT_LONG:${mips3_irix_asm}:dlfcn:irix-shared::-64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
#### Unified HP-UX ANSI C configs.
 | 
			
		||||
# Special notes:
 | 
			
		||||
@@ -252,21 +252,15 @@ my %table=(
 | 
			
		||||
#   crypto/sha/sha_lcl.h.
 | 
			
		||||
#					<appro@fy.chalmers.se>
 | 
			
		||||
#
 | 
			
		||||
#!#"hpux-parisc-cc","cc:-Ae +O3 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl",
 | 
			
		||||
# Since there is mention of this in shlib/hpux10-cc.sh
 | 
			
		||||
"hpux-parisc-cc-o4","cc:-Ae +O4 +ESlit -z -DB_ENDIAN -DBN_DIV2W -DMD32_XARRAY::::-ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1::::::::::dl:hpux-shared:-fPIC::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux-parisc2-gcc","gcc:-march=2.0 -O3 -DB_ENDIAN::-D_REENTRANT::-Wl,+s -ldld:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1:asm/pa-risc2.o:::::::::dl:hpux-shared:-fPIC::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# 64bit PARISC for GCC without optimization, which seems to make problems.
 | 
			
		||||
# Submitted by <ross.alexander@uk.neceur.com>
 | 
			
		||||
"hpux64-parisc-gcc","gcc:-DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dlfcn:hpux64-shared:-fpic::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/pa-risc2W.o:::::::::dlfcn:hpux64-shared:-fpic::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# HP/UX IA-64 targets
 | 
			
		||||
"hpux-ia64-cc","cc:-Ae +DD32 +O3 +Olit=all -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# Frank Geurts <frank.geurts@nl.abnamro.com> has patiently assisted with
 | 
			
		||||
# with debugging of the following config.
 | 
			
		||||
"hpux64-ia64-cc","cc:-Ae +DD64 +O3 +Olit=all -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux64-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# More attempts at unified 10.X and 11.X targets for HP C compiler.
 | 
			
		||||
#
 | 
			
		||||
# Chris Ruemmler <ruemmler@cup.hp.com>
 | 
			
		||||
@@ -278,6 +272,16 @@ my %table=(
 | 
			
		||||
# hpux-parisc1_0-cc with +DAportable flag would make more sense. <appro>
 | 
			
		||||
"hpux-parisc1_1-cc","cc:+DA1.1 +DS1.1 +O3 +Optrs_strongly_typed -Ae +ESlit -DB_ENDIAN -DMD32_XARRAY::-D_REENTRANT::-Wl,+s -ldld:MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::::::::::dl:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
 | 
			
		||||
# HP/UX IA-64 targets
 | 
			
		||||
"hpux-ia64-cc","cc:-Ae +DD32 +O3 +Olit=all -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# Frank Geurts <frank.geurts@nl.abnamro.com> has patiently assisted with
 | 
			
		||||
# with debugging of the following config.
 | 
			
		||||
"hpux64-ia64-cc","cc:-Ae +DD64 +O3 +Olit=all -z -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64-cpp.o:::::::::dlfcn:hpux64-shared:+Z::.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
# GCC builds [not tested yet]...
 | 
			
		||||
# _ILP32 should have been defined by compiler driver, but it isn't...
 | 
			
		||||
"hpux-ia64-gcc","gcc:-O3 -DB_ENDIAN -D_ILP32::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64.o:::::::::dlfcn:hpux-shared:-fpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
 | 
			
		||||
"hpux64-ia64-gcc","gcc:-mlp64 -O3 -DB_ENDIAN::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT:asm/ia64.o:::::::::dlfcn:hpux-shared:-fpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)", 
 | 
			
		||||
 | 
			
		||||
# HPUX 9.X config.
 | 
			
		||||
# Don't use the bundled cc.  It is broken.  Use HP ANSI C if possible, or
 | 
			
		||||
# egcs.  gcc 2.8.1 is also broken.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								FAQ
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								FAQ
									
									
									
									
									
								
							@@ -116,11 +116,14 @@ OpenSSL.  Information on the OpenSSL mailing lists is available from
 | 
			
		||||
 | 
			
		||||
* Where can I get a compiled version of OpenSSL?
 | 
			
		||||
 | 
			
		||||
You can finder pointers to binary distributions in
 | 
			
		||||
http://www.openssl.org/related/binaries.html .
 | 
			
		||||
 | 
			
		||||
Some applications that use OpenSSL are distributed in binary form.
 | 
			
		||||
When using such an application, you don't need to install OpenSSL
 | 
			
		||||
yourself; the application will include the required parts (e.g. DLLs).
 | 
			
		||||
 | 
			
		||||
If you want to install OpenSSL on a Windows system and you don't have
 | 
			
		||||
If you want to build OpenSSL on a Windows system and you don't have
 | 
			
		||||
a C compiler, read the "Mingw32" section of INSTALL.W32 for information
 | 
			
		||||
on how to obtain and install the free GNU C compiler.
 | 
			
		||||
 | 
			
		||||
@@ -646,26 +649,26 @@ built OpenSSL with /MD your application must use /MD and cannot use /MDd.
 | 
			
		||||
* How do I read or write a DER encoded buffer using the ASN1 functions?
 | 
			
		||||
 | 
			
		||||
You have two options. You can either use a memory BIO in conjunction
 | 
			
		||||
with the i2d_XXX_bio() or d2i_XXX_bio() functions or you can use the
 | 
			
		||||
i2d_XXX(), d2i_XXX() functions directly. Since these are often the
 | 
			
		||||
with the i2d_*_bio() or d2i_*_bio() functions or you can use the
 | 
			
		||||
i2d_*(), d2i_*() functions directly. Since these are often the
 | 
			
		||||
cause of grief here are some code fragments using PKCS7 as an example:
 | 
			
		||||
 | 
			
		||||
unsigned char *buf, *p;
 | 
			
		||||
int len;
 | 
			
		||||
 unsigned char *buf, *p;
 | 
			
		||||
 int len;
 | 
			
		||||
 | 
			
		||||
len = i2d_PKCS7(p7, NULL);
 | 
			
		||||
buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
 | 
			
		||||
p = buf;
 | 
			
		||||
i2d_PKCS7(p7, &p);
 | 
			
		||||
 len = i2d_PKCS7(p7, NULL);
 | 
			
		||||
 buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
 | 
			
		||||
 p = buf;
 | 
			
		||||
 i2d_PKCS7(p7, &p);
 | 
			
		||||
 | 
			
		||||
At this point buf contains the len bytes of the DER encoding of
 | 
			
		||||
p7.
 | 
			
		||||
 | 
			
		||||
The opposite assumes we already have len bytes in buf:
 | 
			
		||||
 | 
			
		||||
unsigned char *p;
 | 
			
		||||
p = buf;
 | 
			
		||||
p7 = d2i_PKCS7(NULL, &p, len);
 | 
			
		||||
 unsigned char *p;
 | 
			
		||||
 p = buf;
 | 
			
		||||
 p7 = d2i_PKCS7(NULL, &p, len);
 | 
			
		||||
 | 
			
		||||
At this point p7 contains a valid PKCS7 structure of NULL if an error
 | 
			
		||||
occurred. If an error occurred ERR_print_errors(bio) should give more
 | 
			
		||||
 
 | 
			
		||||
@@ -548,8 +548,10 @@ link_o.irix:
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		ALLSYMSFLAGS='-all'; \
 | 
			
		||||
		NOALLSYMSFLAGS=''; \
 | 
			
		||||
		MINUSWL=""; \
 | 
			
		||||
		($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \
 | 
			
		||||
		ALLSYMSFLAGS="$${MINUSWL}-all"; \
 | 
			
		||||
		NOALLSYMSFLAGS="$${MINUSWL}-notall"; \
 | 
			
		||||
		SHAREDFLAGS="-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-rpath,$(LIBRPATH)"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
@@ -562,8 +564,10 @@ link_a.irix:
 | 
			
		||||
		SHLIB=lib$(LIBNAME).so; \
 | 
			
		||||
		SHLIB_SUFFIX=; \
 | 
			
		||||
		LIBDEPS="$(LIBDEPS) -lc"; \
 | 
			
		||||
		ALLSYMSFLAGS='-all'; \
 | 
			
		||||
		NOALLSYMSFLAGS=''; \
 | 
			
		||||
		MINUSWL=""; \
 | 
			
		||||
		($(CC) -v 2>&1 | grep gcc) > /dev/null && MINUSWL="-Wl,"; \
 | 
			
		||||
		ALLSYMSFLAGS="$${MINUSWL}-all"; \
 | 
			
		||||
		NOALLSYMSFLAGS="$${MINUSWL}-notall"; \
 | 
			
		||||
		SHAREDFLAGS="-shared -Wl,-soname,$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-rpath,$(LIBRPATH)"; \
 | 
			
		||||
		SHAREDCMD='$(CC)'; \
 | 
			
		||||
	fi; \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										83
									
								
								TABLE
									
									
									
									
									
								
							
							
						
						
									
										83
									
								
								TABLE
									
									
									
									
									
								
							@@ -1702,7 +1702,7 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** debug-levitte-linux-elf
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wmissing-prototypes -Wno-long-long -pipe
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -1727,7 +1727,7 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** debug-levitte-linux-elf-extreme
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wmissing-prototypes -Wconversion -Wno-long-long -pipe
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -1752,7 +1752,7 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** debug-levitte-linux-noasm
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wmissing-prototypes -Wno-long-long -pipe
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -1777,7 +1777,7 @@ $arflags      =
 | 
			
		||||
 | 
			
		||||
*** debug-levitte-linux-noasm-extreme
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wmissing-prototypes -Wconversion -Wno-long-long -pipe
 | 
			
		||||
$cflags       = -DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DTERMIO -D_POSIX_SOURCE -DPEDANTIC -ggdb -g3 -mcpu=i486 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
@@ -2350,6 +2350,31 @@ $shared_extension = .sl.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** hpux-ia64-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -O3 -DB_ENDIAN -D_ILP32
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
 | 
			
		||||
$bn_obj       = asm/ia64.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= hpux-shared
 | 
			
		||||
$shared_cflag = -fpic
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** hpux-m68k-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DB_ENDIAN -DBN_DIV2W -O3
 | 
			
		||||
@@ -2500,6 +2525,31 @@ $shared_extension = .sl.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** hpux-parisc2-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -march=2.0 -O3 -DB_ENDIAN
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -Wl,+s -ldld
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1
 | 
			
		||||
$bn_obj       = asm/pa-risc2.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dl
 | 
			
		||||
$shared_target= hpux-shared
 | 
			
		||||
$shared_cflag = -fPIC
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = .sl.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** hpux10-brokencc
 | 
			
		||||
$cc           = cc
 | 
			
		||||
$cflags       = -DB_ENDIAN -DBN_DIV2W -Ae +ESlit +O2 -z
 | 
			
		||||
@@ -2625,6 +2675,31 @@ $shared_extension = .sl.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** hpux64-ia64-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -mlp64 -O3 -DB_ENDIAN
 | 
			
		||||
$unistd       = 
 | 
			
		||||
$thread_cflag = -D_REENTRANT
 | 
			
		||||
$sys_id       = 
 | 
			
		||||
$lflags       = -ldl
 | 
			
		||||
$bn_ops       = SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT
 | 
			
		||||
$bn_obj       = asm/ia64.o
 | 
			
		||||
$des_obj      = 
 | 
			
		||||
$bf_obj       = 
 | 
			
		||||
$md5_obj      = 
 | 
			
		||||
$sha1_obj     = 
 | 
			
		||||
$cast_obj     = 
 | 
			
		||||
$rc4_obj      = 
 | 
			
		||||
$rmd160_obj   = 
 | 
			
		||||
$rc5_obj      = 
 | 
			
		||||
$dso_scheme   = dlfcn
 | 
			
		||||
$shared_target= hpux-shared
 | 
			
		||||
$shared_cflag = -fpic
 | 
			
		||||
$shared_ldflag = 
 | 
			
		||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
 | 
			
		||||
$ranlib       = 
 | 
			
		||||
$arflags      = 
 | 
			
		||||
 | 
			
		||||
*** hpux64-parisc-gcc
 | 
			
		||||
$cc           = gcc
 | 
			
		||||
$cflags       = -DB_ENDIAN -DMD32_XARRAY
 | 
			
		||||
 
 | 
			
		||||
@@ -758,7 +758,7 @@ X509 *load_cert(BIO *err, const char *file, int format,
 | 
			
		||||
		x=d2i_X509_bio(cert,NULL);
 | 
			
		||||
	else if (format == FORMAT_NETSCAPE)
 | 
			
		||||
		{
 | 
			
		||||
		unsigned char *p,*op;
 | 
			
		||||
		const unsigned char *p,*op;
 | 
			
		||||
		int size=0,i;
 | 
			
		||||
 | 
			
		||||
		/* We sort of have to do it this way because it is sort of nice
 | 
			
		||||
 
 | 
			
		||||
@@ -94,6 +94,7 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
	char *infile=NULL,*str=NULL,*prog,*oidfile=NULL, *derfile=NULL;
 | 
			
		||||
	char *genstr=NULL, *genconf=NULL;
 | 
			
		||||
	unsigned char *tmpbuf;
 | 
			
		||||
	const unsigned char *ctmpbuf;
 | 
			
		||||
	BUF_MEM *buf=NULL;
 | 
			
		||||
	STACK *osk=NULL;
 | 
			
		||||
	ASN1_TYPE *at=NULL;
 | 
			
		||||
@@ -317,7 +318,8 @@ bad:
 | 
			
		||||
			tmpbuf+=j;
 | 
			
		||||
			tmplen-=j;
 | 
			
		||||
			atmp = at;
 | 
			
		||||
			at = d2i_ASN1_TYPE(NULL,&tmpbuf,tmplen);
 | 
			
		||||
			ctmpbuf = tmpbuf;
 | 
			
		||||
			at = d2i_ASN1_TYPE(NULL,&ctmpbuf,tmplen);
 | 
			
		||||
			ASN1_TYPE_free(atmp);
 | 
			
		||||
			if(!at)
 | 
			
		||||
				{
 | 
			
		||||
@@ -333,7 +335,15 @@ bad:
 | 
			
		||||
		num=tmplen;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (length == 0) length=(unsigned int)num;
 | 
			
		||||
	if (offset >= num)
 | 
			
		||||
		{
 | 
			
		||||
		BIO_printf(bio_err, "Error: offset too large\n");
 | 
			
		||||
		goto end;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	num -= offset;
 | 
			
		||||
 | 
			
		||||
	if ((length == 0) || ((long)length > num)) length=(unsigned int)num;
 | 
			
		||||
	if(derout) {
 | 
			
		||||
		if(BIO_write(derout, str + offset, length) != (int)length) {
 | 
			
		||||
			BIO_printf(bio_err, "Error writing output\n");
 | 
			
		||||
 
 | 
			
		||||
@@ -701,7 +701,7 @@ end:
 | 
			
		||||
	OPENSSL_EXIT(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ecparam_print_var(BIO *out, BIGNUM *in, const char *var,
 | 
			
		||||
static int ecparam_print_var(BIO *out, BIGNUM *in, const char *var,
 | 
			
		||||
	int len, unsigned char *buffer)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_printf(out, "static unsigned char %s_%d[] = {", var, len);
 | 
			
		||||
 
 | 
			
		||||
@@ -811,7 +811,7 @@ err:
 | 
			
		||||
int alg_print (BIO *x, X509_ALGOR *alg)
 | 
			
		||||
{
 | 
			
		||||
	PBEPARAM *pbe;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	p = alg->parameter->value.sequence->data;
 | 
			
		||||
	pbe = d2i_PBEPARAM (NULL, &p, alg->parameter->value.sequence->length);
 | 
			
		||||
	BIO_printf (bio_err, "%s, Iteration %ld\n", 
 | 
			
		||||
 
 | 
			
		||||
@@ -102,6 +102,9 @@ int MAIN(int argc, char **argv)
 | 
			
		||||
		if ((bio_err=BIO_new(BIO_s_file())) != NULL)
 | 
			
		||||
			BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 | 
			
		||||
 | 
			
		||||
	if (!load_config(bio_err, NULL))
 | 
			
		||||
		goto end;
 | 
			
		||||
 | 
			
		||||
	infile=NULL;
 | 
			
		||||
	outfile=NULL;
 | 
			
		||||
	informat=FORMAT_PEM;
 | 
			
		||||
 
 | 
			
		||||
@@ -1322,7 +1322,7 @@ start:		for (;;)
 | 
			
		||||
			/* If OBJ not recognised ignore it */
 | 
			
		||||
			if ((nid=OBJ_txt2nid(type)) == NID_undef) goto start;
 | 
			
		||||
			if (BIO_snprintf(buf,sizeof buf,"%s_default",v->name)
 | 
			
		||||
				>= sizeof buf)
 | 
			
		||||
				>= (int)sizeof(buf))
 | 
			
		||||
			   {
 | 
			
		||||
			   BIO_printf(bio_err,"Name '%s' too long\n",v->name);
 | 
			
		||||
			   return 0;
 | 
			
		||||
@@ -1387,7 +1387,7 @@ start2:			for (;;)
 | 
			
		||||
					goto start2;
 | 
			
		||||
 | 
			
		||||
				if (BIO_snprintf(buf,sizeof buf,"%s_default",type)
 | 
			
		||||
					>= sizeof buf)
 | 
			
		||||
					>= (int)sizeof(buf))
 | 
			
		||||
				   {
 | 
			
		||||
				   BIO_printf(bio_err,"Name '%s' too long\n",v->name);
 | 
			
		||||
				   return 0;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								config
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								config
									
									
									
									
									
								
							@@ -683,15 +683,8 @@ EOF
 | 
			
		||||
  RM*-siemens-sysv4) OUT="ReliantUNIX" ;;
 | 
			
		||||
  *-siemens-sysv4) OUT="SINIX" ;;
 | 
			
		||||
  *-hpux1*)
 | 
			
		||||
	if [ $CC = "gcc" ];
 | 
			
		||||
	then
 | 
			
		||||
	  if [ $GCC_BITS = "64" ]; then
 | 
			
		||||
	    OUT="hpux64-parisc-gcc"
 | 
			
		||||
	  else
 | 
			
		||||
	    OUT="hpux-parisc-gcc"
 | 
			
		||||
	  fi
 | 
			
		||||
	else
 | 
			
		||||
	  OUT="hpux-parisc-$CC"
 | 
			
		||||
	if [ $CC = "gcc" -a $GCC_BITS = "64" ]; then
 | 
			
		||||
	    OUT="hpux64-parisc2-gcc"
 | 
			
		||||
	fi
 | 
			
		||||
	KERNEL_BITS=`(getconf KERNEL_BITS) 2>/dev/null`
 | 
			
		||||
	KERNEL_BITS=${KERNEL_BITS:-32}
 | 
			
		||||
@@ -708,9 +701,7 @@ EOF
 | 
			
		||||
	     fi
 | 
			
		||||
	     OUT="hpux64-ia64-cc"
 | 
			
		||||
	elif [ $CPU_VERSION -ge 532 ]; then	# PA-RISC 2.x CPU
 | 
			
		||||
	     if [ "$CC" = "cc" ]; then
 | 
			
		||||
		OUT="hpux-parisc2-cc" # can't we have hpux-parisc2-gcc?
 | 
			
		||||
	     fi
 | 
			
		||||
	     OUT=${OUT:-"hpux-parisc2-${CC}"}
 | 
			
		||||
	     if [ $KERNEL_BITS -eq 64 -a "$CC" = "cc" ]; then
 | 
			
		||||
		echo "WARNING! If you wish to build 64-bit library then you have to"
 | 
			
		||||
		echo "         invoke './Configure hpux64-parisc2-cc' *manually*."
 | 
			
		||||
@@ -720,9 +711,9 @@ EOF
 | 
			
		||||
		fi
 | 
			
		||||
	     fi
 | 
			
		||||
	elif [ $CPU_VERSION -ge 528 ]; then	# PA-RISC 1.1+ CPU
 | 
			
		||||
	     :
 | 
			
		||||
	     OUT="hpux-parisc-${CC}
 | 
			
		||||
	elif [ $CPU_VERSION -ge 523 ]; then	# PA-RISC 1.0 CPU
 | 
			
		||||
	     :
 | 
			
		||||
	     OUT="hpux-parisc-${CC}
 | 
			
		||||
	else					# Motorola(?) CPU
 | 
			
		||||
	     OUT="hpux-$CC"
 | 
			
		||||
	fi
 | 
			
		||||
 
 | 
			
		||||
@@ -97,6 +97,15 @@ void AES_cbc_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	const unsigned long length, const AES_KEY *key,
 | 
			
		||||
	unsigned char *ivec, int *num, const int enc);
 | 
			
		||||
void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	const unsigned long length, const AES_KEY *key,
 | 
			
		||||
	unsigned char *ivec, int *num, const int enc);
 | 
			
		||||
void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	const unsigned long length, const AES_KEY *key,
 | 
			
		||||
	unsigned char *ivec, int *num, const int enc);
 | 
			
		||||
void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out,
 | 
			
		||||
			    const int nbits,const AES_KEY *key,
 | 
			
		||||
			    unsigned char *ivec,const int enc);
 | 
			
		||||
void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	const unsigned long length, const AES_KEY *key,
 | 
			
		||||
	unsigned char *ivec, int *num);
 | 
			
		||||
 
 | 
			
		||||
@@ -155,3 +155,96 @@ void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
	*num=n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* This expects a single block of size nbits for both in and out. Note that
 | 
			
		||||
   it corrupts any extra bits in the last byte of out */
 | 
			
		||||
/* Untested, once it is working, it will be optimised */
 | 
			
		||||
void AES_cfbr_encrypt_block(const unsigned char *in,unsigned char *out,
 | 
			
		||||
			    const int nbits,const AES_KEY *key,
 | 
			
		||||
			    unsigned char *ivec,const int enc)
 | 
			
		||||
    {
 | 
			
		||||
    int n;
 | 
			
		||||
    unsigned char ovec[AES_BLOCK_SIZE*2];
 | 
			
		||||
 | 
			
		||||
    assert(in && out && key && ivec);
 | 
			
		||||
    if(enc)
 | 
			
		||||
	{
 | 
			
		||||
	/* construct the new IV */
 | 
			
		||||
	AES_encrypt(ivec,ovec,key);
 | 
			
		||||
	/* encrypt the input */
 | 
			
		||||
	for(n=0 ; n < (nbits+7)/8 ; ++n)
 | 
			
		||||
	    out[n]=in[n]^ovec[n];
 | 
			
		||||
	/* fill in the first half of the new IV with the current IV */
 | 
			
		||||
	memcpy(ovec,ivec,AES_BLOCK_SIZE);
 | 
			
		||||
	/* and put the ciphertext in the second half */
 | 
			
		||||
	memcpy(ovec+AES_BLOCK_SIZE,out,(nbits+7)/8);
 | 
			
		||||
	/* shift ovec left most of the bits... */
 | 
			
		||||
	memmove(ovec,ovec+nbits/8,AES_BLOCK_SIZE+(nbits%8 ? 1 : 0));
 | 
			
		||||
	/* now the remaining bits */
 | 
			
		||||
	if(nbits%8 != 0)
 | 
			
		||||
	    for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
		{
 | 
			
		||||
		ovec[n]<<=nbits%8;
 | 
			
		||||
		ovec[n]|=ovec[n+1]>>(8-nbits%8);
 | 
			
		||||
		}
 | 
			
		||||
	/* finally, move it back into place */
 | 
			
		||||
	memcpy(ivec,ovec,AES_BLOCK_SIZE);
 | 
			
		||||
	}
 | 
			
		||||
    else
 | 
			
		||||
	{
 | 
			
		||||
	/* construct the new IV in the first half of ovec */
 | 
			
		||||
	AES_encrypt(ivec,ovec,key);
 | 
			
		||||
	/* decrypt the input */
 | 
			
		||||
	for(n=0 ; n < (nbits+7)/8 ; ++n)
 | 
			
		||||
	    out[n]=in[n]^ovec[n];
 | 
			
		||||
	/* fill in the first half of the new IV with the current IV */
 | 
			
		||||
	memcpy(ovec,ivec,AES_BLOCK_SIZE);
 | 
			
		||||
	/* append the ciphertext */
 | 
			
		||||
	memcpy(ovec+AES_BLOCK_SIZE,in,(nbits+7)/8);
 | 
			
		||||
	/* shift ovec left most of the bits... */
 | 
			
		||||
	memmove(ovec,ovec+nbits/8,AES_BLOCK_SIZE+(nbits%8 ? 1 : 0));
 | 
			
		||||
	/* now the remaining bits */
 | 
			
		||||
	if(nbits%8 != 0)
 | 
			
		||||
	    for(n=0 ; n < AES_BLOCK_SIZE ; ++n)
 | 
			
		||||
		{
 | 
			
		||||
		ovec[n]<<=nbits%8;
 | 
			
		||||
		ovec[n]|=ovec[n+1]>>(8-nbits%8);
 | 
			
		||||
		}
 | 
			
		||||
	/* finally, move it back into place */
 | 
			
		||||
	memcpy(ivec,ovec,AES_BLOCK_SIZE);
 | 
			
		||||
	}
 | 
			
		||||
    /* it is not necessary to cleanse ovec, since the IV is not secret */
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
/* N.B. This expects the input to be packed, MS bit first */
 | 
			
		||||
void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
		      const unsigned long length, const AES_KEY *key,
 | 
			
		||||
		      unsigned char *ivec, int *num, const int enc)
 | 
			
		||||
    {
 | 
			
		||||
    unsigned int n;
 | 
			
		||||
    unsigned char c[1],d[1];
 | 
			
		||||
 | 
			
		||||
    assert(in && out && key && ivec && num);
 | 
			
		||||
    assert(*num == 0);
 | 
			
		||||
 | 
			
		||||
    memset(out,0,(length+7)/8);
 | 
			
		||||
    for(n=0 ; n < length ; ++n)
 | 
			
		||||
	{
 | 
			
		||||
	c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0;
 | 
			
		||||
	AES_cfbr_encrypt_block(c,d,1,key,ivec,enc);
 | 
			
		||||
	out[n/8]=(out[n/8]&~(1 << (7-n%8)))|((d[0]&0x80) >> (n%8));
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out,
 | 
			
		||||
		      const unsigned long length, const AES_KEY *key,
 | 
			
		||||
		      unsigned char *ivec, int *num, const int enc)
 | 
			
		||||
    {
 | 
			
		||||
    unsigned int n;
 | 
			
		||||
 | 
			
		||||
    assert(in && out && key && ivec && num);
 | 
			
		||||
    assert(*num == 0);
 | 
			
		||||
 | 
			
		||||
    for(n=0 ; n < length ; ++n)
 | 
			
		||||
	AES_cfbr_encrypt_block(&in[n],&out[n],8,key,ivec,enc);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -113,11 +113,12 @@ int i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp)
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, unsigned char **pp,
 | 
			
		||||
	     long len)
 | 
			
		||||
ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,
 | 
			
		||||
	const unsigned char **pp, long len)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_BIT_STRING *ret=NULL;
 | 
			
		||||
	unsigned char *p,*s;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	unsigned char *s;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	if (len < 1)
 | 
			
		||||
 
 | 
			
		||||
@@ -75,10 +75,10 @@ int i2d_ASN1_BOOLEAN(int a, unsigned char **pp)
 | 
			
		||||
	return(r);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int d2i_ASN1_BOOLEAN(int *a, unsigned char **pp, long length)
 | 
			
		||||
int d2i_ASN1_BOOLEAN(int *a, const unsigned char **pp, long length)
 | 
			
		||||
	{
 | 
			
		||||
	int ret= -1;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	long len;
 | 
			
		||||
	int inf,tag,xclass;
 | 
			
		||||
	int i=0;
 | 
			
		||||
 
 | 
			
		||||
@@ -60,14 +60,15 @@
 | 
			
		||||
#include "cryptlib.h"
 | 
			
		||||
#include <openssl/asn1.h>
 | 
			
		||||
 | 
			
		||||
static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c);
 | 
			
		||||
static int asn1_collate_primitive(ASN1_STRING *a, ASN1_const_CTX *c);
 | 
			
		||||
/* type is a 'bitmap' of acceptable string types.
 | 
			
		||||
 */
 | 
			
		||||
ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, unsigned char **pp,
 | 
			
		||||
ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a, const unsigned char **pp,
 | 
			
		||||
	     long length, int type)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_STRING *ret=NULL;
 | 
			
		||||
	unsigned char *p,*s;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	unsigned char *s;
 | 
			
		||||
	long len;
 | 
			
		||||
	int inf,tag,xclass;
 | 
			
		||||
	int i=0;
 | 
			
		||||
@@ -153,11 +154,12 @@ int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass)
 | 
			
		||||
	return(r);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp, long length,
 | 
			
		||||
	     int Ptag, int Pclass)
 | 
			
		||||
ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp,
 | 
			
		||||
	     long length, int Ptag, int Pclass)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_STRING *ret=NULL;
 | 
			
		||||
	unsigned char *p,*s;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	unsigned char *s;
 | 
			
		||||
	long len;
 | 
			
		||||
	int inf,tag,xclass;
 | 
			
		||||
	int i=0;
 | 
			
		||||
@@ -185,7 +187,7 @@ ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp, long length,
 | 
			
		||||
 | 
			
		||||
	if (inf & V_ASN1_CONSTRUCTED)
 | 
			
		||||
		{
 | 
			
		||||
		ASN1_CTX c;
 | 
			
		||||
		ASN1_const_CTX c;
 | 
			
		||||
 | 
			
		||||
		c.pp=pp;
 | 
			
		||||
		c.p=p;
 | 
			
		||||
@@ -247,7 +249,7 @@ err:
 | 
			
		||||
 * them into the one structure that is then returned */
 | 
			
		||||
/* There have been a few bug fixes for this function from
 | 
			
		||||
 * Paul Keogh <paul.keogh@sse.ie>, many thanks to him */
 | 
			
		||||
static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c)
 | 
			
		||||
static int asn1_collate_primitive(ASN1_STRING *a, ASN1_const_CTX *c)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_STRING *os=NULL;
 | 
			
		||||
	BUF_MEM b;
 | 
			
		||||
@@ -268,7 +270,7 @@ static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c)
 | 
			
		||||
		{
 | 
			
		||||
		if (c->inf & 1)
 | 
			
		||||
			{
 | 
			
		||||
			c->eos=ASN1_check_infinite_end(&c->p,
 | 
			
		||||
			c->eos=ASN1_const_check_infinite_end(&c->p,
 | 
			
		||||
				(long)(c->max-c->p));
 | 
			
		||||
			if (c->eos) break;
 | 
			
		||||
			}
 | 
			
		||||
@@ -296,7 +298,7 @@ static int asn1_collate_primitive(ASN1_STRING *a, ASN1_CTX *c)
 | 
			
		||||
		num+=os->length;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	if (!asn1_Finish(c)) goto err;
 | 
			
		||||
	if (!asn1_const_Finish(c)) goto err;
 | 
			
		||||
 | 
			
		||||
	a->length=num;
 | 
			
		||||
	if (a->data != NULL) OPENSSL_free(a->data);
 | 
			
		||||
 
 | 
			
		||||
@@ -107,14 +107,14 @@ err:
 | 
			
		||||
void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x)
 | 
			
		||||
	{
 | 
			
		||||
	BUF_MEM *b = NULL;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	void *ret=NULL;
 | 
			
		||||
	int len;
 | 
			
		||||
 | 
			
		||||
	len = asn1_d2i_read_bio(in, &b);
 | 
			
		||||
	if(len < 0) goto err;
 | 
			
		||||
 | 
			
		||||
	p=(unsigned char *)b->data;
 | 
			
		||||
	p=(const unsigned char *)b->data;
 | 
			
		||||
	ret=ASN1_item_d2i(x,&p,len, it);
 | 
			
		||||
err:
 | 
			
		||||
	if (b != NULL) BUF_MEM_free(b);
 | 
			
		||||
@@ -146,7 +146,7 @@ static int asn1_d2i_read_bio(BIO *in, BUF_MEM **pb)
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	int i;
 | 
			
		||||
	int ret=-1;
 | 
			
		||||
	ASN1_CTX c;
 | 
			
		||||
	ASN1_const_CTX c;
 | 
			
		||||
	int want=HEADER_SIZE;
 | 
			
		||||
	int eos=0;
 | 
			
		||||
#if defined(__GNUC__) && defined(__ia64)
 | 
			
		||||
 
 | 
			
		||||
@@ -91,7 +91,8 @@ char *ASN1_dup(int (*i2d)(), char *(*d2i)(), char *x)
 | 
			
		||||
 | 
			
		||||
void *ASN1_item_dup(const ASN1_ITEM *it, void *x)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char *b = NULL, *p;
 | 
			
		||||
	unsigned char *b = NULL;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	long i;
 | 
			
		||||
	void *ret;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -181,7 +181,7 @@ err:
 | 
			
		||||
	return(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, char *str)
 | 
			
		||||
int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_GENERALIZEDTIME t;
 | 
			
		||||
 | 
			
		||||
@@ -220,7 +220,7 @@ ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,
 | 
			
		||||
		return(NULL);
 | 
			
		||||
 | 
			
		||||
	p=(char *)s->data;
 | 
			
		||||
	if ((p == NULL) || (s->length < len))
 | 
			
		||||
	if ((p == NULL) || ((size_t)s->length < len))
 | 
			
		||||
		{
 | 
			
		||||
		p=OPENSSL_malloc(len);
 | 
			
		||||
		if (p == NULL) return(NULL);
 | 
			
		||||
 
 | 
			
		||||
@@ -76,7 +76,7 @@ int i2d_ASN1_HEADER(ASN1_HEADER *a, unsigned char **pp)
 | 
			
		||||
	M_ASN1_I2D_finish();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
ASN1_HEADER *d2i_ASN1_HEADER(ASN1_HEADER **a, unsigned char **pp,
 | 
			
		||||
ASN1_HEADER *d2i_ASN1_HEADER(ASN1_HEADER **a, const unsigned char **pp,
 | 
			
		||||
	     long length)
 | 
			
		||||
	{
 | 
			
		||||
	M_ASN1_D2I_vars(a,ASN1_HEADER *,ASN1_HEADER_new);
 | 
			
		||||
 
 | 
			
		||||
@@ -155,11 +155,12 @@ int i2c_ASN1_INTEGER(ASN1_INTEGER *a, unsigned char **pp)
 | 
			
		||||
 | 
			
		||||
/* Convert just ASN1 INTEGER content octets to ASN1_INTEGER structure */
 | 
			
		||||
 | 
			
		||||
ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, unsigned char **pp,
 | 
			
		||||
ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a, const unsigned char **pp,
 | 
			
		||||
	     long len)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_INTEGER *ret=NULL;
 | 
			
		||||
	unsigned char *p,*to,*s, *pend;
 | 
			
		||||
	const unsigned char *p, *pend;
 | 
			
		||||
	unsigned char *to,*s;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	if ((a == NULL) || ((*a) == NULL))
 | 
			
		||||
@@ -247,11 +248,12 @@ err:
 | 
			
		||||
 * with its MSB set as negative (it doesn't add a padding zero).
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, unsigned char **pp,
 | 
			
		||||
ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp,
 | 
			
		||||
	     long length)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_INTEGER *ret=NULL;
 | 
			
		||||
	unsigned char *p,*to,*s;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	unsigned char *to,*s;
 | 
			
		||||
	long len;
 | 
			
		||||
	int inf,tag,xclass;
 | 
			
		||||
	int i;
 | 
			
		||||
 
 | 
			
		||||
@@ -189,10 +189,10 @@ int i2a_ASN1_OBJECT(BIO *bp, ASN1_OBJECT *a)
 | 
			
		||||
	return(i);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, unsigned char **pp,
 | 
			
		||||
ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
 | 
			
		||||
	     long length)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	long len;
 | 
			
		||||
	int tag,xclass;
 | 
			
		||||
	int inf,i;
 | 
			
		||||
@@ -219,11 +219,11 @@ err:
 | 
			
		||||
		ASN1_OBJECT_free(ret);
 | 
			
		||||
	return(NULL);
 | 
			
		||||
}
 | 
			
		||||
ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, unsigned char **pp,
 | 
			
		||||
ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp,
 | 
			
		||||
	     long len)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_OBJECT *ret=NULL;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	/* only the ASN1_OBJECTs from the 'table' will have values
 | 
			
		||||
 
 | 
			
		||||
@@ -66,6 +66,6 @@ ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(ASN1_OCTET_STRING *x)
 | 
			
		||||
int ASN1_OCTET_STRING_cmp(ASN1_OCTET_STRING *a, ASN1_OCTET_STRING *b)
 | 
			
		||||
{ return M_ASN1_OCTET_STRING_cmp(a, b); }
 | 
			
		||||
 | 
			
		||||
int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *x, unsigned char *d, int len)
 | 
			
		||||
int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *x, const unsigned char *d, int len)
 | 
			
		||||
{ return M_ASN1_OCTET_STRING_set(x, d, len); }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -153,10 +153,10 @@ SetBlob
 | 
			
		||||
        return(r);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
STACK *d2i_ASN1_SET(STACK **a, unsigned char **pp, long length,
 | 
			
		||||
STACK *d2i_ASN1_SET(STACK **a, const unsigned char **pp, long length,
 | 
			
		||||
	     char *(*func)(), void (*free_func)(void *), int ex_tag, int ex_class)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_CTX c;
 | 
			
		||||
	ASN1_const_CTX c;
 | 
			
		||||
	STACK *ret=NULL;
 | 
			
		||||
 | 
			
		||||
	if ((a == NULL) || ((*a) == NULL))
 | 
			
		||||
 
 | 
			
		||||
@@ -162,7 +162,7 @@ err:
 | 
			
		||||
	return(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, char *str)
 | 
			
		||||
int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str)
 | 
			
		||||
	{
 | 
			
		||||
	ASN1_UTCTIME t;
 | 
			
		||||
 | 
			
		||||
@@ -200,7 +200,7 @@ ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t)
 | 
			
		||||
		return(NULL);
 | 
			
		||||
 | 
			
		||||
	p=(char *)s->data;
 | 
			
		||||
	if ((p == NULL) || (s->length < len))
 | 
			
		||||
	if ((p == NULL) || ((size_t)s->length < len))
 | 
			
		||||
		{
 | 
			
		||||
		p=OPENSSL_malloc(len);
 | 
			
		||||
		if (p == NULL) return(NULL);
 | 
			
		||||
 
 | 
			
		||||
@@ -160,6 +160,10 @@ struct X509_algor_st;
 | 
			
		||||
#define DECLARE_ASN1_SET_OF(type) /* filled in by mkstack.pl */
 | 
			
		||||
#define IMPLEMENT_ASN1_SET_OF(type) /* nothing, no longer needed */
 | 
			
		||||
 | 
			
		||||
/* We MUST make sure that, except for constness, asn1_ctx_st and
 | 
			
		||||
   asn1_const_ctx are exactly the same.  Fortunately, as soon as
 | 
			
		||||
   the old ASN1 parsing macros are gone, we can throw this away
 | 
			
		||||
   as well... */
 | 
			
		||||
typedef struct asn1_ctx_st
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char *p;/* work char pointer */
 | 
			
		||||
@@ -175,6 +179,21 @@ typedef struct asn1_ctx_st
 | 
			
		||||
	int line;	/* used in error processing */
 | 
			
		||||
	} ASN1_CTX;
 | 
			
		||||
 | 
			
		||||
typedef struct asn1_const_ctx_st
 | 
			
		||||
	{
 | 
			
		||||
	const unsigned char *p;/* work char pointer */
 | 
			
		||||
	int eos;	/* end of sequence read for indefinite encoding */
 | 
			
		||||
	int error;	/* error code to use when returning an error */
 | 
			
		||||
	int inf;	/* constructed if 0x20, indefinite is 0x21 */
 | 
			
		||||
	int tag;	/* tag from last 'get object' */
 | 
			
		||||
	int xclass;	/* class from last 'get object' */
 | 
			
		||||
	long slen;	/* length of last 'get object' */
 | 
			
		||||
	const unsigned char *max; /* largest value of p allowed */
 | 
			
		||||
	const unsigned char *q;/* temporary variable */
 | 
			
		||||
	const unsigned char **pp;/* variable */
 | 
			
		||||
	int line;	/* used in error processing */
 | 
			
		||||
	} ASN1_const_CTX;
 | 
			
		||||
 | 
			
		||||
/* These are used internally in the ASN1_OBJECT to keep track of
 | 
			
		||||
 * whether the names and data need to be free()ed */
 | 
			
		||||
#define ASN1_OBJECT_FLAG_DYNAMIC	 0x01	/* internal use */
 | 
			
		||||
@@ -276,7 +295,7 @@ typedef struct ASN1_VALUE_st ASN1_VALUE;
 | 
			
		||||
	DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name)
 | 
			
		||||
 | 
			
		||||
#define	DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \
 | 
			
		||||
	type *d2i_##name(type **a, unsigned char **in, long len); \
 | 
			
		||||
	type *d2i_##name(type **a, const unsigned char **in, long len); \
 | 
			
		||||
	int i2d_##name(type *a, unsigned char **out); \
 | 
			
		||||
	DECLARE_ASN1_ITEM(itname)
 | 
			
		||||
 | 
			
		||||
@@ -712,9 +731,9 @@ void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value);
 | 
			
		||||
ASN1_OBJECT *	ASN1_OBJECT_new(void );
 | 
			
		||||
void		ASN1_OBJECT_free(ASN1_OBJECT *a);
 | 
			
		||||
int		i2d_ASN1_OBJECT(ASN1_OBJECT *a,unsigned char **pp);
 | 
			
		||||
ASN1_OBJECT *	c2i_ASN1_OBJECT(ASN1_OBJECT **a,unsigned char **pp,
 | 
			
		||||
ASN1_OBJECT *	c2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp,
 | 
			
		||||
			long length);
 | 
			
		||||
ASN1_OBJECT *	d2i_ASN1_OBJECT(ASN1_OBJECT **a,unsigned char **pp,
 | 
			
		||||
ASN1_OBJECT *	d2i_ASN1_OBJECT(ASN1_OBJECT **a,const unsigned char **pp,
 | 
			
		||||
			long length);
 | 
			
		||||
 | 
			
		||||
DECLARE_ASN1_ITEM(ASN1_OBJECT)
 | 
			
		||||
@@ -737,7 +756,7 @@ unsigned char * ASN1_STRING_data(ASN1_STRING *x);
 | 
			
		||||
 | 
			
		||||
DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING)
 | 
			
		||||
int		i2c_ASN1_BIT_STRING(ASN1_BIT_STRING *a,unsigned char **pp);
 | 
			
		||||
ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,unsigned char **pp,
 | 
			
		||||
ASN1_BIT_STRING *c2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a,const unsigned char **pp,
 | 
			
		||||
			long length);
 | 
			
		||||
int		ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d,
 | 
			
		||||
			int length );
 | 
			
		||||
@@ -753,13 +772,13 @@ int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, char *name, int value,
 | 
			
		||||
				BIT_STRING_BITNAME *tbl);
 | 
			
		||||
 | 
			
		||||
int		i2d_ASN1_BOOLEAN(int a,unsigned char **pp);
 | 
			
		||||
int 		d2i_ASN1_BOOLEAN(int *a,unsigned char **pp,long length);
 | 
			
		||||
int 		d2i_ASN1_BOOLEAN(int *a,const unsigned char **pp,long length);
 | 
			
		||||
 | 
			
		||||
DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER)
 | 
			
		||||
int		i2c_ASN1_INTEGER(ASN1_INTEGER *a,unsigned char **pp);
 | 
			
		||||
ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a,unsigned char **pp,
 | 
			
		||||
ASN1_INTEGER *c2i_ASN1_INTEGER(ASN1_INTEGER **a,const unsigned char **pp,
 | 
			
		||||
			long length);
 | 
			
		||||
ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a,unsigned char **pp,
 | 
			
		||||
ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a,const unsigned char **pp,
 | 
			
		||||
			long length);
 | 
			
		||||
ASN1_INTEGER *	ASN1_INTEGER_dup(ASN1_INTEGER *x);
 | 
			
		||||
int ASN1_INTEGER_cmp(ASN1_INTEGER *x, ASN1_INTEGER *y);
 | 
			
		||||
@@ -768,7 +787,7 @@ DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED)
 | 
			
		||||
 | 
			
		||||
int ASN1_UTCTIME_check(ASN1_UTCTIME *a);
 | 
			
		||||
ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s,time_t t);
 | 
			
		||||
int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, char *str); 
 | 
			
		||||
int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str);
 | 
			
		||||
int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t);
 | 
			
		||||
#if 0
 | 
			
		||||
time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s);
 | 
			
		||||
@@ -776,12 +795,12 @@ time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s);
 | 
			
		||||
 | 
			
		||||
int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *a);
 | 
			
		||||
ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,time_t t);
 | 
			
		||||
int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, char *str); 
 | 
			
		||||
int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str);
 | 
			
		||||
 | 
			
		||||
DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING)
 | 
			
		||||
ASN1_OCTET_STRING *	ASN1_OCTET_STRING_dup(ASN1_OCTET_STRING *a);
 | 
			
		||||
int 	ASN1_OCTET_STRING_cmp(ASN1_OCTET_STRING *a, ASN1_OCTET_STRING *b);
 | 
			
		||||
int 	ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, unsigned char *data, int len);
 | 
			
		||||
int 	ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, int len);
 | 
			
		||||
 | 
			
		||||
DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING)
 | 
			
		||||
DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING)
 | 
			
		||||
@@ -812,7 +831,7 @@ ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(ASN1_TIME *t, ASN1_GENERALIZE
 | 
			
		||||
 | 
			
		||||
int		i2d_ASN1_SET(STACK *a, unsigned char **pp,
 | 
			
		||||
			int (*func)(), int ex_tag, int ex_class, int is_set);
 | 
			
		||||
STACK *		d2i_ASN1_SET(STACK **a, unsigned char **pp, long length,
 | 
			
		||||
STACK *		d2i_ASN1_SET(STACK **a, const unsigned char **pp, long length,
 | 
			
		||||
			char *(*func)(), void (*free_func)(void *),
 | 
			
		||||
			int ex_tag, int ex_class);
 | 
			
		||||
 | 
			
		||||
@@ -846,20 +865,22 @@ BIGNUM *ASN1_ENUMERATED_to_BN(ASN1_ENUMERATED *ai,BIGNUM *bn);
 | 
			
		||||
int ASN1_PRINTABLE_type(unsigned char *s, int max);
 | 
			
		||||
 | 
			
		||||
int i2d_ASN1_bytes(ASN1_STRING *a, unsigned char **pp, int tag, int xclass);
 | 
			
		||||
ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, unsigned char **pp,
 | 
			
		||||
ASN1_STRING *d2i_ASN1_bytes(ASN1_STRING **a, const unsigned char **pp,
 | 
			
		||||
	long length, int Ptag, int Pclass);
 | 
			
		||||
unsigned long ASN1_tag2bit(int tag);
 | 
			
		||||
/* type is one or more of the B_ASN1_ values. */
 | 
			
		||||
ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a,unsigned char **pp,
 | 
			
		||||
ASN1_STRING *d2i_ASN1_type_bytes(ASN1_STRING **a,const unsigned char **pp,
 | 
			
		||||
		long length,int type);
 | 
			
		||||
 | 
			
		||||
/* PARSING */
 | 
			
		||||
int asn1_Finish(ASN1_CTX *c);
 | 
			
		||||
int asn1_const_Finish(ASN1_const_CTX *c);
 | 
			
		||||
 | 
			
		||||
/* SPECIALS */
 | 
			
		||||
int ASN1_get_object(unsigned char **pp, long *plength, int *ptag,
 | 
			
		||||
int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag,
 | 
			
		||||
	int *pclass, long omax);
 | 
			
		||||
int ASN1_check_infinite_end(unsigned char **p,long len);
 | 
			
		||||
int ASN1_const_check_infinite_end(const unsigned char **p,long len);
 | 
			
		||||
void ASN1_put_object(unsigned char **pp, int constructed, int length,
 | 
			
		||||
	int tag, int xclass);
 | 
			
		||||
int ASN1_put_eoc(unsigned char **pp);
 | 
			
		||||
@@ -890,14 +911,14 @@ int ASN1_GENERALIZEDTIME_print(BIO *fp,ASN1_GENERALIZEDTIME *a);
 | 
			
		||||
int ASN1_TIME_print(BIO *fp,ASN1_TIME *a);
 | 
			
		||||
int ASN1_STRING_print(BIO *bp,ASN1_STRING *v);
 | 
			
		||||
int ASN1_STRING_print_ex(BIO *out, ASN1_STRING *str, unsigned long flags);
 | 
			
		||||
int ASN1_parse(BIO *bp,unsigned char *pp,long len,int indent);
 | 
			
		||||
int ASN1_parse_dump(BIO *bp,unsigned char *pp,long len,int indent,int dump);
 | 
			
		||||
int ASN1_parse(BIO *bp,const unsigned char *pp,long len,int indent);
 | 
			
		||||
int ASN1_parse_dump(BIO *bp,const unsigned char *pp,long len,int indent,int dump);
 | 
			
		||||
#endif
 | 
			
		||||
const char *ASN1_tag2str(int tag);
 | 
			
		||||
 | 
			
		||||
/* Used to load and write netscape format cert/key */
 | 
			
		||||
int i2d_ASN1_HEADER(ASN1_HEADER *a,unsigned char **pp);
 | 
			
		||||
ASN1_HEADER *d2i_ASN1_HEADER(ASN1_HEADER **a,unsigned char **pp, long length);
 | 
			
		||||
ASN1_HEADER *d2i_ASN1_HEADER(ASN1_HEADER **a,const unsigned char **pp, long length);
 | 
			
		||||
ASN1_HEADER *ASN1_HEADER_new(void );
 | 
			
		||||
void ASN1_HEADER_free(ASN1_HEADER *a);
 | 
			
		||||
 | 
			
		||||
@@ -918,7 +939,7 @@ int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num,
 | 
			
		||||
int ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a,long *num,
 | 
			
		||||
	unsigned char *data, int max_len);
 | 
			
		||||
 | 
			
		||||
STACK *ASN1_seq_unpack(unsigned char *buf, int len, char *(*d2i)(),
 | 
			
		||||
STACK *ASN1_seq_unpack(const unsigned char *buf, int len, char *(*d2i)(),
 | 
			
		||||
						 void (*free_func)(void *) );
 | 
			
		||||
unsigned char *ASN1_seq_pack(STACK *safes, int (*i2d)(), unsigned char **buf,
 | 
			
		||||
			     int *len );
 | 
			
		||||
@@ -947,7 +968,7 @@ void ASN1_STRING_TABLE_cleanup(void);
 | 
			
		||||
/* Old API compatible functions */
 | 
			
		||||
ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it);
 | 
			
		||||
void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it);
 | 
			
		||||
ASN1_VALUE * ASN1_item_d2i(ASN1_VALUE **val, unsigned char **in, long len, const ASN1_ITEM *it);
 | 
			
		||||
ASN1_VALUE * ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it);
 | 
			
		||||
int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);
 | 
			
		||||
int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -141,7 +141,9 @@ ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf)
 | 
			
		||||
	int i, len;
 | 
			
		||||
 | 
			
		||||
	unsigned char *orig_der = NULL, *new_der = NULL;
 | 
			
		||||
	unsigned char *cpy_start, *p;
 | 
			
		||||
	const unsigned char *cpy_start;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *cp;
 | 
			
		||||
	int cpy_len;
 | 
			
		||||
	long hdr_len;
 | 
			
		||||
	int hdr_constructed = 0, hdr_tag, hdr_class;
 | 
			
		||||
@@ -249,10 +251,10 @@ ASN1_TYPE *ASN1_generate_v3(char *str, X509V3_CTX *cnf)
 | 
			
		||||
	/* Copy across original encoding */
 | 
			
		||||
	memcpy(p, cpy_start, cpy_len);
 | 
			
		||||
 | 
			
		||||
	p = new_der;
 | 
			
		||||
	cp = new_der;
 | 
			
		||||
 | 
			
		||||
	/* Obtain new ASN1_TYPE structure */
 | 
			
		||||
	ret = d2i_ASN1_TYPE(NULL, &p, len);
 | 
			
		||||
	ret = d2i_ASN1_TYPE(NULL, &cp, len);
 | 
			
		||||
 | 
			
		||||
	err:
 | 
			
		||||
	if (orig_der)
 | 
			
		||||
 
 | 
			
		||||
@@ -62,11 +62,11 @@
 | 
			
		||||
#include <openssl/asn1.h>
 | 
			
		||||
#include <openssl/asn1_mac.h>
 | 
			
		||||
 | 
			
		||||
static int asn1_get_length(unsigned char **pp,int *inf,long *rl,int max);
 | 
			
		||||
static int asn1_get_length(const unsigned char **pp,int *inf,long *rl,int max);
 | 
			
		||||
static void asn1_put_length(unsigned char **pp, int length);
 | 
			
		||||
const char *ASN1_version="ASN.1" OPENSSL_VERSION_PTEXT;
 | 
			
		||||
 | 
			
		||||
int ASN1_check_infinite_end(unsigned char **p, long len)
 | 
			
		||||
static int _asn1_check_infinite_end(const unsigned char **p, long len)
 | 
			
		||||
	{
 | 
			
		||||
	/* If there is 0 or 1 byte left, the length check should pick
 | 
			
		||||
	 * things up */
 | 
			
		||||
@@ -80,13 +80,23 @@ int ASN1_check_infinite_end(unsigned char **p, long len)
 | 
			
		||||
	return(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int ASN1_check_infinite_end(unsigned char **p, long len)
 | 
			
		||||
	{
 | 
			
		||||
	return _asn1_check_infinite_end((const unsigned char **)p, len);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int ASN1_get_object(unsigned char **pp, long *plength, int *ptag, int *pclass,
 | 
			
		||||
	     long omax)
 | 
			
		||||
int ASN1_const_check_infinite_end(const unsigned char **p, long len)
 | 
			
		||||
	{
 | 
			
		||||
	return _asn1_check_infinite_end(p, len);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag,
 | 
			
		||||
	int *pclass, long omax)
 | 
			
		||||
	{
 | 
			
		||||
	int i,ret;
 | 
			
		||||
	long l;
 | 
			
		||||
	unsigned char *p= *pp;
 | 
			
		||||
	const unsigned char *p= *pp;
 | 
			
		||||
	int tag,xclass,inf;
 | 
			
		||||
	long max=omax;
 | 
			
		||||
 | 
			
		||||
@@ -141,9 +151,9 @@ err:
 | 
			
		||||
	return(0x80);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int asn1_get_length(unsigned char **pp, int *inf, long *rl, int max)
 | 
			
		||||
static int asn1_get_length(const unsigned char **pp, int *inf, long *rl, int max)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char *p= *pp;
 | 
			
		||||
	const unsigned char *p= *pp;
 | 
			
		||||
	unsigned long ret=0;
 | 
			
		||||
	unsigned int i;
 | 
			
		||||
 | 
			
		||||
@@ -272,11 +282,11 @@ int ASN1_object_size(int constructed, int length, int tag)
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int asn1_Finish(ASN1_CTX *c)
 | 
			
		||||
static int _asn1_Finish(ASN1_const_CTX *c)
 | 
			
		||||
	{
 | 
			
		||||
	if ((c->inf == (1|V_ASN1_CONSTRUCTED)) && (!c->eos))
 | 
			
		||||
		{
 | 
			
		||||
		if (!ASN1_check_infinite_end(&c->p,c->slen))
 | 
			
		||||
		if (!ASN1_const_check_infinite_end(&c->p,c->slen))
 | 
			
		||||
			{
 | 
			
		||||
			c->error=ERR_R_MISSING_ASN1_EOS;
 | 
			
		||||
			return(0);
 | 
			
		||||
@@ -291,9 +301,19 @@ int asn1_Finish(ASN1_CTX *c)
 | 
			
		||||
	return(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int asn1_GetSequence(ASN1_CTX *c, long *length)
 | 
			
		||||
int asn1_Finish(ASN1_CTX *c)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char *q;
 | 
			
		||||
	return _asn1_Finish((ASN1_const_CTX *)c);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int asn1_const_Finish(ASN1_const_CTX *c)
 | 
			
		||||
	{
 | 
			
		||||
	return _asn1_Finish(c);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int asn1_GetSequence(ASN1_const_CTX *c, long *length)
 | 
			
		||||
	{
 | 
			
		||||
	const unsigned char *q;
 | 
			
		||||
 | 
			
		||||
	q=c->p;
 | 
			
		||||
	c->inf=ASN1_get_object(&(c->p),&(c->slen),&(c->tag),&(c->xclass),
 | 
			
		||||
@@ -419,7 +439,7 @@ int ASN1_STRING_cmp(ASN1_STRING *a, ASN1_STRING *b)
 | 
			
		||||
		return(i);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void asn1_add_error(unsigned char *address, int offset)
 | 
			
		||||
void asn1_add_error(const unsigned char *address, int offset)
 | 
			
		||||
	{
 | 
			
		||||
	char buf1[DECIMAL_SIZE(address)+1],buf2[DECIMAL_SIZE(offset)+1];
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -73,11 +73,11 @@ extern "C" {
 | 
			
		||||
	ERR_PUT_error(ASN1_MAC_ERR_LIB,(f),(r),__FILE__,(line))
 | 
			
		||||
 | 
			
		||||
#define M_ASN1_D2I_vars(a,type,func) \
 | 
			
		||||
	ASN1_CTX c; \
 | 
			
		||||
	ASN1_const_CTX c; \
 | 
			
		||||
	type ret=NULL; \
 | 
			
		||||
	\
 | 
			
		||||
	c.pp=(unsigned char **)pp; \
 | 
			
		||||
	c.q= *(unsigned char **)pp; \
 | 
			
		||||
	c.pp=(const unsigned char **)pp; \
 | 
			
		||||
	c.q= *(const unsigned char **)pp; \
 | 
			
		||||
	c.error=ERR_R_NESTED_ASN1_ERROR; \
 | 
			
		||||
	if ((a == NULL) || ((*a) == NULL)) \
 | 
			
		||||
		{ if ((ret=(type)func()) == NULL) \
 | 
			
		||||
@@ -85,13 +85,13 @@ extern "C" {
 | 
			
		||||
	else	ret=(*a);
 | 
			
		||||
 | 
			
		||||
#define M_ASN1_D2I_Init() \
 | 
			
		||||
	c.p= *(unsigned char **)pp; \
 | 
			
		||||
	c.p= *(const unsigned char **)pp; \
 | 
			
		||||
	c.max=(length == 0)?0:(c.p+length);
 | 
			
		||||
 | 
			
		||||
#define M_ASN1_D2I_Finish_2(a) \
 | 
			
		||||
	if (!asn1_Finish(&c)) \
 | 
			
		||||
	if (!asn1_const_Finish(&c)) \
 | 
			
		||||
		{ c.line=__LINE__; goto err; } \
 | 
			
		||||
	*(unsigned char **)pp=c.p; \
 | 
			
		||||
	*(const unsigned char **)pp=c.p; \
 | 
			
		||||
	if (a != NULL) (*a)=ret; \
 | 
			
		||||
	return(ret);
 | 
			
		||||
 | 
			
		||||
@@ -99,7 +99,7 @@ extern "C" {
 | 
			
		||||
	M_ASN1_D2I_Finish_2(a); \
 | 
			
		||||
err:\
 | 
			
		||||
	ASN1_MAC_H_err((e),c.error,c.line); \
 | 
			
		||||
	asn1_add_error(*(unsigned char **)pp,(int)(c.q- *pp)); \
 | 
			
		||||
	asn1_add_error(*(const unsigned char **)pp,(int)(c.q- *pp)); \
 | 
			
		||||
	if ((ret != NULL) && ((a == NULL) || (*a != ret))) func(ret); \
 | 
			
		||||
	return(NULL)
 | 
			
		||||
 | 
			
		||||
@@ -123,7 +123,7 @@ err:\
 | 
			
		||||
 | 
			
		||||
#define M_ASN1_D2I_end_sequence() \
 | 
			
		||||
	(((c.inf&1) == 0)?(c.slen <= 0): \
 | 
			
		||||
		(c.eos=ASN1_check_infinite_end(&c.p,c.slen)))
 | 
			
		||||
		(c.eos=ASN1_const_check_infinite_end(&c.p,c.slen)))
 | 
			
		||||
 | 
			
		||||
/* Don't use this with d2i_ASN1_BOOLEAN() */
 | 
			
		||||
#define M_ASN1_D2I_get(b,func) \
 | 
			
		||||
@@ -278,7 +278,7 @@ err:\
 | 
			
		||||
			{ c.line=__LINE__; goto err; } \
 | 
			
		||||
		if (Tinf == (V_ASN1_CONSTRUCTED+1)) { \
 | 
			
		||||
			Tlen = c.slen - (c.p - c.q); \
 | 
			
		||||
			if(!ASN1_check_infinite_end(&c.p, Tlen)) \
 | 
			
		||||
			if(!ASN1_const_check_infinite_end(&c.p, Tlen)) \
 | 
			
		||||
				{ c.error=ERR_R_MISSING_ASN1_EOS; \
 | 
			
		||||
				c.line=__LINE__; goto err; } \
 | 
			
		||||
		}\
 | 
			
		||||
@@ -353,8 +353,12 @@ err:\
 | 
			
		||||
		return(NULL)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define M_ASN1_next		(*c.p)
 | 
			
		||||
#define M_ASN1_next_prev	(*c.q)
 | 
			
		||||
/* BIG UGLY WARNING!  This is so damn ugly I wanna puke.  Unfortunately,
 | 
			
		||||
   some macros that use ASN1_const_CTX still insist on writing in the input
 | 
			
		||||
   stream.  ARGH!  ARGH!  ARGH!  Let's get rid of this macro package.
 | 
			
		||||
   Please?						-- Richard Levitte */
 | 
			
		||||
#define M_ASN1_next		(*((unsigned char *)(c.p)))
 | 
			
		||||
#define M_ASN1_next_prev	(*((unsigned char *)(c.q)))
 | 
			
		||||
 | 
			
		||||
/*************************************************/
 | 
			
		||||
 | 
			
		||||
@@ -551,8 +555,8 @@ err:\
 | 
			
		||||
#define M_ASN1_I2D_finish()	*pp=p; \
 | 
			
		||||
				return(r);
 | 
			
		||||
 | 
			
		||||
int asn1_GetSequence(ASN1_CTX *c, long *length);
 | 
			
		||||
void asn1_add_error(unsigned char *address,int offset);
 | 
			
		||||
int asn1_GetSequence(ASN1_const_CTX *c, long *length);
 | 
			
		||||
void asn1_add_error(const unsigned char *address,int offset);
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -64,7 +64,7 @@
 | 
			
		||||
 | 
			
		||||
static int asn1_print_info(BIO *bp, int tag, int xclass,int constructed,
 | 
			
		||||
	int indent);
 | 
			
		||||
static int asn1_parse2(BIO *bp, unsigned char **pp, long length,
 | 
			
		||||
static int asn1_parse2(BIO *bp, const unsigned char **pp, long length,
 | 
			
		||||
	int offset, int depth, int indent, int dump);
 | 
			
		||||
static int asn1_print_info(BIO *bp, int tag, int xclass, int constructed,
 | 
			
		||||
	     int indent)
 | 
			
		||||
@@ -103,20 +103,20 @@ err:
 | 
			
		||||
	return(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int ASN1_parse(BIO *bp, unsigned char *pp, long len, int indent)
 | 
			
		||||
int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent)
 | 
			
		||||
	{
 | 
			
		||||
	return(asn1_parse2(bp,&pp,len,0,0,indent,0));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int ASN1_parse_dump(BIO *bp, unsigned char *pp, long len, int indent, int dump)
 | 
			
		||||
int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, int dump)
 | 
			
		||||
	{
 | 
			
		||||
	return(asn1_parse2(bp,&pp,len,0,0,indent,dump));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static int asn1_parse2(BIO *bp, unsigned char **pp, long length, int offset,
 | 
			
		||||
static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, int offset,
 | 
			
		||||
	     int depth, int indent, int dump)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char *p,*ep,*tot,*op,*opp;
 | 
			
		||||
	const unsigned char *p,*ep,*tot,*op,*opp;
 | 
			
		||||
	long len;
 | 
			
		||||
	int tag,xclass,ret=0;
 | 
			
		||||
	int nl,hl,j,r;
 | 
			
		||||
 
 | 
			
		||||
@@ -634,10 +634,10 @@ struct ASN1_TLC_st{
 | 
			
		||||
 | 
			
		||||
typedef ASN1_VALUE * ASN1_new_func(void);
 | 
			
		||||
typedef void ASN1_free_func(ASN1_VALUE *a);
 | 
			
		||||
typedef ASN1_VALUE * ASN1_d2i_func(ASN1_VALUE **a, unsigned char ** in, long length);
 | 
			
		||||
typedef ASN1_VALUE * ASN1_d2i_func(ASN1_VALUE **a, const unsigned char ** in, long length);
 | 
			
		||||
typedef int ASN1_i2d_func(ASN1_VALUE * a, unsigned char **in);
 | 
			
		||||
 | 
			
		||||
typedef int ASN1_ex_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const ASN1_ITEM *it,
 | 
			
		||||
typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it,
 | 
			
		||||
					int tag, int aclass, char opt, ASN1_TLC *ctx);
 | 
			
		||||
 | 
			
		||||
typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass);
 | 
			
		||||
@@ -645,7 +645,7 @@ typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
 | 
			
		||||
typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it);
 | 
			
		||||
typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
 | 
			
		||||
typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
 | 
			
		||||
 | 
			
		||||
typedef struct ASN1_COMPAT_FUNCS_st {
 | 
			
		||||
	ASN1_new_func *asn1_new;
 | 
			
		||||
@@ -793,7 +793,7 @@ typedef struct ASN1_AUX_st {
 | 
			
		||||
	IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname)
 | 
			
		||||
 | 
			
		||||
#define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \
 | 
			
		||||
	stname *d2i_##fname(stname **a, unsigned char **in, long len) \
 | 
			
		||||
	stname *d2i_##fname(stname **a, const unsigned char **in, long len) \
 | 
			
		||||
	{ \
 | 
			
		||||
		return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\
 | 
			
		||||
	} \
 | 
			
		||||
@@ -814,7 +814,7 @@ typedef struct ASN1_AUX_st {
 | 
			
		||||
#define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \
 | 
			
		||||
	stname *d2i_##fname(stname **a, const unsigned char **in, long len) \
 | 
			
		||||
	{ \
 | 
			
		||||
		return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, (unsigned char **)in, len, ASN1_ITEM_rptr(itname));\
 | 
			
		||||
		return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\
 | 
			
		||||
	} \
 | 
			
		||||
	int i2d_##fname(const stname *a, unsigned char **out) \
 | 
			
		||||
	{ \
 | 
			
		||||
@@ -855,8 +855,8 @@ int ASN1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
 | 
			
		||||
int ASN1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
 | 
			
		||||
void ASN1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
 | 
			
		||||
int ASN1_template_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const ASN1_TEMPLATE *tt);
 | 
			
		||||
int ASN1_item_ex_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const ASN1_ITEM *it,
 | 
			
		||||
int ASN1_template_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_TEMPLATE *tt);
 | 
			
		||||
int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it,
 | 
			
		||||
				int tag, int aclass, char opt, ASN1_TLC *ctx);
 | 
			
		||||
 | 
			
		||||
int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass);
 | 
			
		||||
@@ -864,7 +864,7 @@ int ASN1_template_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_TEMPLAT
 | 
			
		||||
void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
 | 
			
		||||
int asn1_ex_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it);
 | 
			
		||||
int asn1_ex_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
 | 
			
		||||
int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
 | 
			
		||||
 | 
			
		||||
int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
int asn1_set_choice_selector(ASN1_VALUE **pval, int value, const ASN1_ITEM *it);
 | 
			
		||||
@@ -878,7 +878,7 @@ int asn1_do_lock(ASN1_VALUE **pval, int op, const ASN1_ITEM *it);
 | 
			
		||||
void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
int asn1_enc_save(ASN1_VALUE **pval, unsigned char *in, int inlen, const ASN1_ITEM *it);
 | 
			
		||||
int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen, const ASN1_ITEM *it);
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -87,9 +87,14 @@ static int oid_module_init(CONF_IMODULE *md, const CONF *cnf)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
static void oid_module_finish(CONF_IMODULE *md)
 | 
			
		||||
	{
 | 
			
		||||
	OBJ_cleanup();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void ASN1_add_oid_module(void)
 | 
			
		||||
	{
 | 
			
		||||
	CONF_module_add("oid_section", oid_module_init, 0);
 | 
			
		||||
	CONF_module_add("oid_section", oid_module_init, oid_module_finish);
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -66,11 +66,11 @@
 | 
			
		||||
 | 
			
		||||
/* Turn an ASN1 encoded SEQUENCE OF into a STACK of structures */
 | 
			
		||||
 | 
			
		||||
STACK *ASN1_seq_unpack(unsigned char *buf, int len, char *(*d2i)(),
 | 
			
		||||
STACK *ASN1_seq_unpack(const unsigned char *buf, int len, char *(*d2i)(),
 | 
			
		||||
	     void (*free_func)(void *))
 | 
			
		||||
{
 | 
			
		||||
    STACK *sk;
 | 
			
		||||
    unsigned char *pbuf;
 | 
			
		||||
    const unsigned char *pbuf;
 | 
			
		||||
    pbuf =  buf;
 | 
			
		||||
    if (!(sk = d2i_ASN1_SET(NULL, &pbuf, len, d2i, free_func,
 | 
			
		||||
					V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL)))
 | 
			
		||||
@@ -181,7 +181,7 @@ ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, ASN1_STRING **oct)
 | 
			
		||||
 | 
			
		||||
void *ASN1_item_unpack(ASN1_STRING *oct, const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	void *ret;
 | 
			
		||||
 | 
			
		||||
	p = oct->data;
 | 
			
		||||
 
 | 
			
		||||
@@ -72,7 +72,7 @@
 | 
			
		||||
#include <openssl/ec.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, unsigned char **pp,
 | 
			
		||||
EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
	     long length)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY *ret;
 | 
			
		||||
@@ -135,11 +135,11 @@ err:
 | 
			
		||||
 | 
			
		||||
/* This works like d2i_PrivateKey() except it automatically works out the type */
 | 
			
		||||
 | 
			
		||||
EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, unsigned char **pp,
 | 
			
		||||
EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
	     long length)
 | 
			
		||||
{
 | 
			
		||||
	STACK_OF(ASN1_TYPE) *inkey;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	int keytype;
 | 
			
		||||
	p = *pp;
 | 
			
		||||
	/* Dirty trick: read in the ASN1 data into a STACK_OF(ASN1_TYPE):
 | 
			
		||||
 
 | 
			
		||||
@@ -72,7 +72,7 @@
 | 
			
		||||
#include <openssl/ec.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, unsigned char **pp,
 | 
			
		||||
EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
	     long length)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY *ret;
 | 
			
		||||
 
 | 
			
		||||
@@ -137,9 +137,9 @@ int ASN1_TYPE_get_int_octetstring(ASN1_TYPE *a, long *num, unsigned char *data,
 | 
			
		||||
	int ret= -1,n;
 | 
			
		||||
	ASN1_INTEGER *ai=NULL;
 | 
			
		||||
	ASN1_OCTET_STRING *os=NULL;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	long length;
 | 
			
		||||
	ASN1_CTX c;
 | 
			
		||||
	ASN1_const_CTX c;
 | 
			
		||||
 | 
			
		||||
	if ((a->type != V_ASN1_SEQUENCE) || (a->value.sequence == NULL))
 | 
			
		||||
		{
 | 
			
		||||
 
 | 
			
		||||
@@ -65,14 +65,14 @@
 | 
			
		||||
#include <openssl/buffer.h>
 | 
			
		||||
#include <openssl/err.h>
 | 
			
		||||
 | 
			
		||||
static int asn1_check_eoc(unsigned char **in, long len);
 | 
			
		||||
static int asn1_collect(BUF_MEM *buf, unsigned char **in, long len, char inf, int tag, int aclass);
 | 
			
		||||
static int collect_data(BUF_MEM *buf, unsigned char **p, long plen);
 | 
			
		||||
static int asn1_check_eoc(const unsigned char **in, long len);
 | 
			
		||||
static int asn1_collect(BUF_MEM *buf, const unsigned char **in, long len, char inf, int tag, int aclass);
 | 
			
		||||
static int collect_data(BUF_MEM *buf, const unsigned char **p, long plen);
 | 
			
		||||
static int asn1_check_tlen(long *olen, int *otag, unsigned char *oclass, char *inf, char *cst,
 | 
			
		||||
			unsigned char **in, long len, int exptag, int expclass, char opt, ASN1_TLC *ctx);
 | 
			
		||||
static int asn1_template_ex_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, ASN1_TLC *ctx);
 | 
			
		||||
static int asn1_template_noexp_d2i(ASN1_VALUE **val, unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, ASN1_TLC *ctx);
 | 
			
		||||
static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, unsigned char **in, long len,
 | 
			
		||||
			const unsigned char **in, long len, int exptag, int expclass, char opt, ASN1_TLC *ctx);
 | 
			
		||||
static int asn1_template_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, ASN1_TLC *ctx);
 | 
			
		||||
static int asn1_template_noexp_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, ASN1_TLC *ctx);
 | 
			
		||||
static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, const unsigned char **in, long len,
 | 
			
		||||
					const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx);
 | 
			
		||||
 | 
			
		||||
/* Table to convert tags to bit values, used for MSTRING type */
 | 
			
		||||
@@ -106,7 +106,7 @@ unsigned long ASN1_tag2bit(int tag)
 | 
			
		||||
 * case.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const ASN1_ITEM *it)
 | 
			
		||||
ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
	ASN1_TLC c;
 | 
			
		||||
	ASN1_VALUE *ptmpval = NULL;
 | 
			
		||||
@@ -117,7 +117,7 @@ ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ASN1_template_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const ASN1_TEMPLATE *tt)
 | 
			
		||||
int ASN1_template_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_TEMPLATE *tt)
 | 
			
		||||
{
 | 
			
		||||
	ASN1_TLC c;
 | 
			
		||||
	asn1_tlc_clear(&c);
 | 
			
		||||
@@ -129,7 +129,7 @@ int ASN1_template_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const ASN
 | 
			
		||||
 * If 'opt' set and tag mismatch return -1 to handle OPTIONAL
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int ASN1_item_ex_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const ASN1_ITEM *it,
 | 
			
		||||
int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, const ASN1_ITEM *it,
 | 
			
		||||
				int tag, int aclass, char opt, ASN1_TLC *ctx)
 | 
			
		||||
{
 | 
			
		||||
	const ASN1_TEMPLATE *tt, *errtt = NULL;
 | 
			
		||||
@@ -137,7 +137,9 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const ASN1
 | 
			
		||||
	const ASN1_EXTERN_FUNCS *ef;
 | 
			
		||||
	const ASN1_AUX *aux = it->funcs;
 | 
			
		||||
	ASN1_aux_cb *asn1_cb;
 | 
			
		||||
	unsigned char *p, *q, imphack = 0, oclass;
 | 
			
		||||
	const unsigned char *p, *q;
 | 
			
		||||
	unsigned char *wp=NULL;	/* BIG FAT WARNING!  BREAKS CONST WHERE USED */
 | 
			
		||||
	unsigned char imphack = 0, oclass;
 | 
			
		||||
	char seq_eoc, seq_nolen, cst, isopt;
 | 
			
		||||
	long tmplen;
 | 
			
		||||
	int i;
 | 
			
		||||
@@ -229,14 +231,14 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const ASN1
 | 
			
		||||
		 */
 | 
			
		||||
 | 
			
		||||
		if(tag != -1) {
 | 
			
		||||
			p = *in;
 | 
			
		||||
			imphack = *p;
 | 
			
		||||
			*p = (unsigned char)((*p & V_ASN1_CONSTRUCTED) | it->utype);
 | 
			
		||||
			wp = *(unsigned char **)in;
 | 
			
		||||
			imphack = *wp;
 | 
			
		||||
			*wp = (unsigned char)((*p & V_ASN1_CONSTRUCTED) | it->utype);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ptmpval = cf->asn1_d2i(pval, in, len);
 | 
			
		||||
 | 
			
		||||
		if(tag != -1) *p = imphack;
 | 
			
		||||
		if(tag != -1) *wp = imphack;
 | 
			
		||||
 | 
			
		||||
		if(ptmpval) return 1;
 | 
			
		||||
		ASN1err(ASN1_F_ASN1_ITEM_EX_D2I, ERR_R_NESTED_ASN1_ERROR);
 | 
			
		||||
@@ -416,12 +418,12 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, unsigned char **in, long len, const ASN1
 | 
			
		||||
 * rest.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int asn1_template_ex_d2i(ASN1_VALUE **val, unsigned char **in, long inlen, const ASN1_TEMPLATE *tt, char opt, ASN1_TLC *ctx)
 | 
			
		||||
static int asn1_template_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long inlen, const ASN1_TEMPLATE *tt, char opt, ASN1_TLC *ctx)
 | 
			
		||||
{
 | 
			
		||||
	int flags, aclass;
 | 
			
		||||
	int ret;
 | 
			
		||||
	long len;
 | 
			
		||||
	unsigned char *p, *q;
 | 
			
		||||
	const unsigned char *p, *q;
 | 
			
		||||
	char exp_eoc;
 | 
			
		||||
	if(!val) return 0;
 | 
			
		||||
	flags = tt->flags;
 | 
			
		||||
@@ -478,11 +480,11 @@ static int asn1_template_ex_d2i(ASN1_VALUE **val, unsigned char **in, long inlen
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int asn1_template_noexp_d2i(ASN1_VALUE **val, unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, ASN1_TLC *ctx)
 | 
			
		||||
static int asn1_template_noexp_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_TEMPLATE *tt, char opt, ASN1_TLC *ctx)
 | 
			
		||||
{
 | 
			
		||||
	int flags, aclass;
 | 
			
		||||
	int ret;
 | 
			
		||||
	unsigned char *p, *q;
 | 
			
		||||
	const unsigned char *p, *q;
 | 
			
		||||
	if(!val) return 0;
 | 
			
		||||
	flags = tt->flags;
 | 
			
		||||
	aclass = flags & ASN1_TFLG_TAG_CLASS;
 | 
			
		||||
@@ -578,16 +580,16 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val, unsigned char **in, long le
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, unsigned char **in, long inlen, 
 | 
			
		||||
static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, const unsigned char **in, long inlen, 
 | 
			
		||||
						const ASN1_ITEM *it,
 | 
			
		||||
						int tag, int aclass, char opt, ASN1_TLC *ctx)
 | 
			
		||||
{
 | 
			
		||||
	int ret = 0, utype;
 | 
			
		||||
	long plen;
 | 
			
		||||
	char cst, inf, free_cont = 0;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	BUF_MEM buf;
 | 
			
		||||
	unsigned char *cont = NULL;
 | 
			
		||||
	const unsigned char *cont = NULL;
 | 
			
		||||
	long len; 
 | 
			
		||||
	if(!pval) {
 | 
			
		||||
		ASN1err(ASN1_F_ASN1_D2I_EX_PRIMITIVE, ASN1_R_ILLEGAL_NULL);
 | 
			
		||||
@@ -670,7 +672,7 @@ static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, unsigned char **in, long inl
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
		buf.data[len] = 0;
 | 
			
		||||
		cont = (unsigned char *)buf.data;
 | 
			
		||||
		cont = (const unsigned char *)buf.data;
 | 
			
		||||
		free_cont = 1;
 | 
			
		||||
	} else {
 | 
			
		||||
		cont = p;
 | 
			
		||||
@@ -690,7 +692,7 @@ static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, unsigned char **in, long inl
 | 
			
		||||
 | 
			
		||||
/* Translate ASN1 content octets into a structure */
 | 
			
		||||
 | 
			
		||||
int asn1_ex_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it)
 | 
			
		||||
int asn1_ex_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
	ASN1_VALUE **opval = NULL;
 | 
			
		||||
	ASN1_STRING *stmp;
 | 
			
		||||
@@ -781,7 +783,7 @@ int asn1_ex_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char
 | 
			
		||||
		/* If we've already allocated a buffer use it */
 | 
			
		||||
		if(*free_cont) {
 | 
			
		||||
			if(stmp->data) OPENSSL_free(stmp->data);
 | 
			
		||||
			stmp->data = cont;
 | 
			
		||||
			stmp->data = (unsigned char *)cont; /* UGLY CAST! RL */
 | 
			
		||||
			stmp->length = len;
 | 
			
		||||
			*free_cont = 0;
 | 
			
		||||
		} else {
 | 
			
		||||
@@ -816,9 +818,9 @@ int asn1_ex_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char
 | 
			
		||||
 * length constructed stuff.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int asn1_collect(BUF_MEM *buf, unsigned char **in, long len, char inf, int tag, int aclass)
 | 
			
		||||
static int asn1_collect(BUF_MEM *buf, const unsigned char **in, long len, char inf, int tag, int aclass)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char *p, *q;
 | 
			
		||||
	const unsigned char *p, *q;
 | 
			
		||||
	long plen;
 | 
			
		||||
	char cst, ininf;
 | 
			
		||||
	p = *in;
 | 
			
		||||
@@ -860,7 +862,7 @@ static int asn1_collect(BUF_MEM *buf, unsigned char **in, long len, char inf, in
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int collect_data(BUF_MEM *buf, unsigned char **p, long plen)
 | 
			
		||||
static int collect_data(BUF_MEM *buf, const unsigned char **p, long plen)
 | 
			
		||||
{
 | 
			
		||||
		int len;
 | 
			
		||||
		if(buf) {
 | 
			
		||||
@@ -877,9 +879,9 @@ static int collect_data(BUF_MEM *buf, unsigned char **p, long plen)
 | 
			
		||||
 | 
			
		||||
/* Check for ASN1 EOC and swallow it if found */
 | 
			
		||||
 | 
			
		||||
static int asn1_check_eoc(unsigned char **in, long len)
 | 
			
		||||
static int asn1_check_eoc(const unsigned char **in, long len)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	if(len < 2) return 0;
 | 
			
		||||
	p = *in;
 | 
			
		||||
	if(!p[0] && !p[1]) {
 | 
			
		||||
@@ -897,12 +899,12 @@ static int asn1_check_eoc(unsigned char **in, long len)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int asn1_check_tlen(long *olen, int *otag, unsigned char *oclass, char *inf, char *cst,
 | 
			
		||||
		unsigned char **in, long len, int exptag, int expclass, char opt, ASN1_TLC *ctx)
 | 
			
		||||
		const unsigned char **in, long len, int exptag, int expclass, char opt, ASN1_TLC *ctx)
 | 
			
		||||
{
 | 
			
		||||
	int i;
 | 
			
		||||
	int ptag, pclass;
 | 
			
		||||
	long plen;
 | 
			
		||||
	unsigned char *p, *q;
 | 
			
		||||
	const unsigned char *p, *q;
 | 
			
		||||
	p = *in;
 | 
			
		||||
	q = p;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -154,7 +154,7 @@ void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int asn1_enc_save(ASN1_VALUE **pval, unsigned char *in, int inlen, const ASN1_ITEM *it)
 | 
			
		||||
int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen, const ASN1_ITEM *it)
 | 
			
		||||
{
 | 
			
		||||
	ASN1_ENCODING *enc;
 | 
			
		||||
	enc = asn1_get_enc_ptr(pval, it);
 | 
			
		||||
 
 | 
			
		||||
@@ -72,7 +72,7 @@ static int bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
static void bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
 | 
			
		||||
static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it);
 | 
			
		||||
static int bn_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
 | 
			
		||||
static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
 | 
			
		||||
 | 
			
		||||
static ASN1_PRIMITIVE_FUNCS bignum_pf = {
 | 
			
		||||
	NULL, 0,
 | 
			
		||||
@@ -122,7 +122,8 @@ static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN
 | 
			
		||||
	return pad + BN_num_bytes(bn);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int bn_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it)
 | 
			
		||||
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);
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,7 @@ static int long_new(ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
static void long_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
 | 
			
		||||
 | 
			
		||||
static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it);
 | 
			
		||||
static int long_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
 | 
			
		||||
static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it);
 | 
			
		||||
 | 
			
		||||
static ASN1_PRIMITIVE_FUNCS long_pf = {
 | 
			
		||||
	NULL, 0,
 | 
			
		||||
@@ -136,7 +136,8 @@ static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const A
 | 
			
		||||
	return clen + pad;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int long_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it)
 | 
			
		||||
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;
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,7 @@
 | 
			
		||||
#include <openssl/asn1t.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
 | 
			
		||||
static int x509_name_ex_d2i(ASN1_VALUE **val, unsigned char **in, long len, const ASN1_ITEM *it,
 | 
			
		||||
static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it,
 | 
			
		||||
					int tag, int aclass, char opt, ASN1_TLC *ctx);
 | 
			
		||||
 | 
			
		||||
static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass);
 | 
			
		||||
@@ -156,10 +156,10 @@ static void sk_internal_free(void *a)
 | 
			
		||||
	sk_free(a);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int x509_name_ex_d2i(ASN1_VALUE **val, unsigned char **in, long len, const ASN1_ITEM *it,
 | 
			
		||||
static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long len, const ASN1_ITEM *it,
 | 
			
		||||
					int tag, int aclass, char opt, ASN1_TLC *ctx)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char *p = *in, *q;
 | 
			
		||||
	const unsigned char *p = *in, *q;
 | 
			
		||||
	STACK *intname = NULL;
 | 
			
		||||
	int i, j, ret;
 | 
			
		||||
	X509_NAME *nm = NULL;
 | 
			
		||||
 
 | 
			
		||||
@@ -69,7 +69,7 @@ int i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp)
 | 
			
		||||
	return(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
X509_PKEY *d2i_X509_PKEY(X509_PKEY **a, unsigned char **pp, long length)
 | 
			
		||||
X509_PKEY *d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp, long length)
 | 
			
		||||
	{
 | 
			
		||||
	int i;
 | 
			
		||||
	M_ASN1_D2I_vars(a,X509_PKEY *,X509_PKEY_new);
 | 
			
		||||
 
 | 
			
		||||
@@ -226,7 +226,7 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
 | 
			
		||||
	EVP_PKEY *ret=NULL;
 | 
			
		||||
	long j;
 | 
			
		||||
	int type;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_ECDSA)
 | 
			
		||||
	const unsigned char *cp;
 | 
			
		||||
	X509_ALGOR *a;
 | 
			
		||||
@@ -342,7 +342,7 @@ err:
 | 
			
		||||
 * and encode or decode as X509_PUBKEY
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, unsigned char **pp,
 | 
			
		||||
EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
	     long length)
 | 
			
		||||
	{
 | 
			
		||||
	X509_PUBKEY *xpk;
 | 
			
		||||
@@ -375,12 +375,12 @@ int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp)
 | 
			
		||||
 * keys
 | 
			
		||||
 */
 | 
			
		||||
#ifndef OPENSSL_NO_RSA
 | 
			
		||||
RSA *d2i_RSA_PUBKEY(RSA **a, unsigned char **pp,
 | 
			
		||||
RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp,
 | 
			
		||||
	     long length)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY *pkey;
 | 
			
		||||
	RSA *key;
 | 
			
		||||
	unsigned char *q;
 | 
			
		||||
	const unsigned char *q;
 | 
			
		||||
	q = *pp;
 | 
			
		||||
	pkey = d2i_PUBKEY(NULL, &q, length);
 | 
			
		||||
	if (!pkey) return NULL;
 | 
			
		||||
@@ -415,12 +415,12 @@ int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DSA
 | 
			
		||||
DSA *d2i_DSA_PUBKEY(DSA **a, unsigned char **pp,
 | 
			
		||||
DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp,
 | 
			
		||||
	     long length)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY *pkey;
 | 
			
		||||
	DSA *key;
 | 
			
		||||
	unsigned char *q;
 | 
			
		||||
	const unsigned char *q;
 | 
			
		||||
	q = *pp;
 | 
			
		||||
	pkey = d2i_PUBKEY(NULL, &q, length);
 | 
			
		||||
	if (!pkey) return NULL;
 | 
			
		||||
@@ -455,11 +455,11 @@ int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_EC
 | 
			
		||||
EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, unsigned char **pp, long length)
 | 
			
		||||
EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_PKEY *pkey;
 | 
			
		||||
	EC_KEY *key;
 | 
			
		||||
	unsigned char *q;
 | 
			
		||||
	const unsigned char *q;
 | 
			
		||||
	q = *pp;
 | 
			
		||||
	pkey = d2i_PUBKEY(NULL, &q, length);
 | 
			
		||||
	if (!pkey) return(NULL);
 | 
			
		||||
 
 | 
			
		||||
@@ -161,9 +161,9 @@ void *X509_get_ex_data(X509 *r, int idx)
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
X509 *d2i_X509_AUX(X509 **a, unsigned char **pp, long length)
 | 
			
		||||
X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char *q;
 | 
			
		||||
	const unsigned char *q;
 | 
			
		||||
	X509 *ret;
 | 
			
		||||
	/* Save start position */
 | 
			
		||||
	q = *pp;
 | 
			
		||||
 
 | 
			
		||||
@@ -122,6 +122,13 @@ asm/ia64-cpp.o:	asm/ia64.S
 | 
			
		||||
 | 
			
		||||
asm/x86_64-gcc.o: asm/x86_64-gcc.c
 | 
			
		||||
 | 
			
		||||
# GNU assembler fails to compile PA-RISC2 modules, insist on calling
 | 
			
		||||
# vendor assembler...
 | 
			
		||||
asm/pa-risc2W.o: asm/pa-risc2W.s
 | 
			
		||||
	/usr/ccs/bin/as -o asm/pa-risc2W.o asm/pa-risc2W.s
 | 
			
		||||
asm/pa-risc2.o: asm/pa-risc2.s
 | 
			
		||||
	/usr/ccs/bin/as -o asm/pa-risc2.o asm/pa-risc2.s
 | 
			
		||||
 | 
			
		||||
files:
 | 
			
		||||
	$(PERL) $(TOP)/util/files.pl Makefile.ssl >> $(TOP)/MINFO
 | 
			
		||||
 | 
			
		||||
@@ -243,8 +250,13 @@ bn_gf2m.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
bn_gf2m.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
 | 
			
		||||
bn_gf2m.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
bn_gf2m.o: ../cryptlib.h bn_gf2m.c bn_lcl.h
 | 
			
		||||
bn_kron.o: ../../include/openssl/bn.h ../../include/openssl/e_os2.h
 | 
			
		||||
bn_kron.o: ../../include/openssl/opensslconf.h bn_kron.c bn_lcl.h
 | 
			
		||||
bn_kron.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
bn_kron.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
bn_kron.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 | 
			
		||||
bn_kron.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
 | 
			
		||||
bn_kron.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
 | 
			
		||||
bn_kron.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
bn_kron.o: ../cryptlib.h bn_kron.c bn_lcl.h
 | 
			
		||||
bn_lib.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
 | 
			
		||||
bn_lib.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
 | 
			
		||||
bn_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
 | 
			
		||||
 
 | 
			
		||||
@@ -142,7 +142,7 @@ void bn_sqr_words(BN_ULONG *r, BN_ULONG *a, int n)
 | 
			
		||||
BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d)
 | 
			
		||||
{	BN_ULONG ret,waste;
 | 
			
		||||
 | 
			
		||||
	asm ("divq	%3"
 | 
			
		||||
	asm ("divq	%4"
 | 
			
		||||
		: "=a"(ret),"=d"(waste)
 | 
			
		||||
		: "a"(l),"d"(h),"g"(d)
 | 
			
		||||
		: "cc");
 | 
			
		||||
 
 | 
			
		||||
@@ -372,7 +372,17 @@ int BN_GENCB_call(BN_GENCB *cb, int a, int b);
 | 
			
		||||
#define BN_is_odd(a)	    (((a)->top > 0) && ((a)->d[0] & 1))
 | 
			
		||||
 | 
			
		||||
#define BN_one(a)	(BN_set_word((a),1))
 | 
			
		||||
#define BN_zero_ex(a) \
 | 
			
		||||
	do { \
 | 
			
		||||
		BIGNUM *_tmp_bn = (a); \
 | 
			
		||||
		_tmp_bn->top = 0; \
 | 
			
		||||
		_tmp_bn->neg = 0; \
 | 
			
		||||
	} while(0)
 | 
			
		||||
#ifdef OPENSSL_NO_DEPRECATED
 | 
			
		||||
#define BN_zero(a)	BN_zero_ex(a)
 | 
			
		||||
#else
 | 
			
		||||
#define BN_zero(a)	(BN_set_word((a),0))
 | 
			
		||||
#endif
 | 
			
		||||
/* BN_set_sign(BIGNUM *, int) sets the sign of a BIGNUM
 | 
			
		||||
 * (0 for a non-negative value, 1 for negative) */
 | 
			
		||||
#define BN_set_sign(a,b) ((a)->neg = (b))
 | 
			
		||||
 
 | 
			
		||||
@@ -123,7 +123,8 @@ void BN_CTX_free(BN_CTX *ctx)
 | 
			
		||||
 | 
			
		||||
	for (i=0; i < BN_CTX_NUM; i++) {
 | 
			
		||||
		bn_check_top(&(ctx->bn[i]));
 | 
			
		||||
		BN_clear_free(&(ctx->bn[i]));
 | 
			
		||||
		if (ctx->bn[i].d)
 | 
			
		||||
			BN_clear_free(&(ctx->bn[i]));
 | 
			
		||||
	}
 | 
			
		||||
	if (ctx->flags & BN_FLG_MALLOCED)
 | 
			
		||||
		OPENSSL_free(ctx);
 | 
			
		||||
@@ -139,6 +140,7 @@ void BN_CTX_start(BN_CTX *ctx)
 | 
			
		||||
 | 
			
		||||
BIGNUM *BN_CTX_get(BN_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
	BIGNUM *ret;
 | 
			
		||||
	/* Note: If BN_CTX_get is ever changed to allocate BIGNUMs dynamically,
 | 
			
		||||
	 * make sure that if BN_CTX_get fails once it will return NULL again
 | 
			
		||||
	 * until BN_CTX_end is called.  (This is so that callers have to check
 | 
			
		||||
@@ -154,8 +156,10 @@ BIGNUM *BN_CTX_get(BN_CTX *ctx)
 | 
			
		||||
			}
 | 
			
		||||
		return NULL;
 | 
			
		||||
		}
 | 
			
		||||
	bn_check_top(&(ctx->bn[ctx->tos]));
 | 
			
		||||
	return (&(ctx->bn[ctx->tos++]));
 | 
			
		||||
	ret = ctx->bn + (ctx->tos++);
 | 
			
		||||
	/* always return a 'zeroed' bignum */
 | 
			
		||||
	BN_zero(ret);
 | 
			
		||||
	return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void BN_CTX_end(BN_CTX *ctx)
 | 
			
		||||
@@ -170,19 +174,11 @@ void BN_CTX_end(BN_CTX *ctx)
 | 
			
		||||
 | 
			
		||||
	ctx->too_many = 0;
 | 
			
		||||
	ctx->depth--;
 | 
			
		||||
	/* It appears some "scrapbook" uses of BN_CTX result in BIGNUMs being
 | 
			
		||||
	 * left in an inconsistent state when they are released (eg. BN_div).
 | 
			
		||||
	 * These can trip us up when they get reused, so the safest fix is to
 | 
			
		||||
	 * make sure the BIGNUMs are made sane when the context usage is
 | 
			
		||||
	 * releasing them. */
 | 
			
		||||
	if (ctx->depth < BN_CTX_NUM_POS)
 | 
			
		||||
#if 0
 | 
			
		||||
#ifndef BN_DEBUG
 | 
			
		||||
		ctx->tos = ctx->pos[ctx->depth];
 | 
			
		||||
#else
 | 
			
		||||
		{
 | 
			
		||||
		while(ctx->tos > ctx->pos[ctx->depth])
 | 
			
		||||
			/* This ensures the BIGNUM is sane(r) for reuse. */
 | 
			
		||||
			ctx->bn[--(ctx->tos)].top = 0;
 | 
			
		||||
		}
 | 
			
		||||
			bn_check_top(&ctx->bn[--(ctx->tos)]);
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -214,7 +214,6 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,
 | 
			
		||||
		res=BN_CTX_get(ctx);
 | 
			
		||||
	else	res=dv;
 | 
			
		||||
	if (sdiv == NULL || res == NULL) goto err;
 | 
			
		||||
	tmp->neg=0;
 | 
			
		||||
 | 
			
		||||
	/* First we normalise the numbers */
 | 
			
		||||
	norm_shift=BN_BITS2-((BN_num_bits(divisor))%BN_BITS2);
 | 
			
		||||
@@ -232,10 +231,8 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,
 | 
			
		||||
	wnum.neg   = 0;
 | 
			
		||||
	wnum.d     = &(snum->d[loop]);
 | 
			
		||||
	wnum.top   = div_n;
 | 
			
		||||
#ifdef BN_DEBUG_RAND
 | 
			
		||||
	/* only needed when BN_ucmp messes up the values between top and max */
 | 
			
		||||
	wnum.dmax  = snum->dmax - loop; /* so we don't step out of bounds */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* Get the top 2 words of sdiv */
 | 
			
		||||
	/* div_n=sdiv->top; */
 | 
			
		||||
@@ -256,12 +253,10 @@ int BN_div(BIGNUM *dv, BIGNUM *rm, const BIGNUM *num, const BIGNUM *divisor,
 | 
			
		||||
 | 
			
		||||
	if (BN_ucmp(&wnum,sdiv) >= 0)
 | 
			
		||||
		{
 | 
			
		||||
#ifdef BN_DEBUG_RAND
 | 
			
		||||
		/* If BN_DEBUG_RAND is defined BN_ucmp changes (via
 | 
			
		||||
		 * bn_pollute) the const bignum arguments =>
 | 
			
		||||
		 * clean the values between top and max again */
 | 
			
		||||
		bn_clear_top2max(&wnum);
 | 
			
		||||
#endif
 | 
			
		||||
		bn_sub_words(wnum.d, wnum.d, sdiv->d, div_n);
 | 
			
		||||
		*resp=1;
 | 
			
		||||
		}
 | 
			
		||||
@@ -384,13 +379,13 @@ X) -> 0x%08X\n",
 | 
			
		||||
		/* store part of the result */
 | 
			
		||||
		*resp = q;
 | 
			
		||||
		}
 | 
			
		||||
	bn_correct_top(snum);
 | 
			
		||||
	if (rm != NULL)
 | 
			
		||||
		{
 | 
			
		||||
		/* Keep a copy of the neg flag in num because if rm==num
 | 
			
		||||
		 * BN_rshift() will overwrite it.
 | 
			
		||||
		 */
 | 
			
		||||
		int neg = num->neg;
 | 
			
		||||
		bn_correct_top(snum);
 | 
			
		||||
		BN_rshift(rm,snum,norm_shift);
 | 
			
		||||
		if (!BN_is_zero(rm))
 | 
			
		||||
			rm->neg = neg;
 | 
			
		||||
 
 | 
			
		||||
@@ -266,7 +266,8 @@ int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
 | 
			
		||||
	if (!BN_nnmod(&(val[0]),a,m,ctx)) goto err;		/* 1 */
 | 
			
		||||
	if (BN_is_zero(&(val[0])))
 | 
			
		||||
		{
 | 
			
		||||
		ret = BN_zero(r);
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -409,7 +410,8 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
 | 
			
		||||
		aa=a;
 | 
			
		||||
	if (BN_is_zero(aa))
 | 
			
		||||
		{
 | 
			
		||||
		ret = BN_zero(rr);
 | 
			
		||||
		BN_zero(rr);
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	if (!BN_to_montgomery(&(val[0]),aa,mont,ctx)) goto err; /* 1 */
 | 
			
		||||
@@ -541,7 +543,8 @@ int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p,
 | 
			
		||||
		}
 | 
			
		||||
	if (a == 0)
 | 
			
		||||
		{
 | 
			
		||||
		ret = BN_zero(rr);
 | 
			
		||||
		BN_zero(rr);
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		return ret;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -666,7 +669,8 @@ int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
 | 
			
		||||
	if (!BN_nnmod(&(val[0]),a,m,ctx)) goto err;		/* 1 */
 | 
			
		||||
	if (BN_is_zero(&(val[0])))
 | 
			
		||||
		{
 | 
			
		||||
		ret = BN_zero(r);
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -179,7 +179,8 @@ int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1,
 | 
			
		||||
		a_mod_m = a1;
 | 
			
		||||
	if (BN_is_zero(a_mod_m))
 | 
			
		||||
		{
 | 
			
		||||
		ret = BN_zero(rr);
 | 
			
		||||
		BN_zero(rr);
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -214,7 +215,8 @@ int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1,
 | 
			
		||||
		a_mod_m = a2;
 | 
			
		||||
	if (BN_is_zero(a_mod_m))
 | 
			
		||||
		{
 | 
			
		||||
		ret = BN_zero(rr);
 | 
			
		||||
		BN_zero(rr);
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
	if (!BN_to_montgomery(&(val2[0]),a_mod_m,mont,ctx)) goto err;
 | 
			
		||||
 
 | 
			
		||||
@@ -228,7 +228,7 @@ static void bn_GF2m_mul_1x1(BN_ULONG *r1, BN_ULONG *r0, const BN_ULONG a, const
 | 
			
		||||
	BN_ULONG tab[16], top3b = a >> 61;
 | 
			
		||||
	register BN_ULONG a1, a2, a4, a8;
 | 
			
		||||
 | 
			
		||||
	a1 = a & (0x1FFFFFFFFFFFFFFF); a2 = a1 << 1; a4 = a2 << 1; a8 = a4 << 1;
 | 
			
		||||
	a1 = a & (0x1FFFFFFFFFFFFFFFULL); a2 = a1 << 1; a4 = a2 << 1; a8 = a4 << 1;
 | 
			
		||||
 | 
			
		||||
	tab[ 0] = 0;     tab[ 1] = a1;       tab[ 2] = a2;       tab[ 3] = a1^a2;
 | 
			
		||||
	tab[ 4] = a4;    tab[ 5] = a1^a4;    tab[ 6] = a2^a4;    tab[ 7] = a1^a2^a4;
 | 
			
		||||
@@ -329,8 +329,11 @@ int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const unsigned int p[])
 | 
			
		||||
	bn_check_top(a);
 | 
			
		||||
 | 
			
		||||
	if (!p[0])
 | 
			
		||||
		{
 | 
			
		||||
		/* reduction mod 1 => return 0 */
 | 
			
		||||
		return BN_zero(r);
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	/* Since the algorithm does reduction in the r value, if a != r, copy
 | 
			
		||||
	 * the contents of a into r so we can do reduction in r. 
 | 
			
		||||
@@ -590,7 +593,6 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
 | 
			
		||||
	if (v == NULL) goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BN_one(b)) goto err;
 | 
			
		||||
	if (!BN_zero(c)) goto err;
 | 
			
		||||
	if (!BN_GF2m_mod(u, a, p)) goto err;
 | 
			
		||||
	if (!BN_copy(v, p)) goto err;
 | 
			
		||||
 | 
			
		||||
@@ -709,7 +711,6 @@ int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *y, const BIGNUM *x, const BIGNUM *p
 | 
			
		||||
	if (!BN_GF2m_mod(u, y, p)) goto err;
 | 
			
		||||
	if (!BN_GF2m_mod(a, x, p)) goto err;
 | 
			
		||||
	if (!BN_copy(b, p)) goto err;
 | 
			
		||||
	if (!BN_zero(v)) goto err;
 | 
			
		||||
	
 | 
			
		||||
	while (!BN_is_odd(a))
 | 
			
		||||
		{
 | 
			
		||||
@@ -865,13 +866,15 @@ int	BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, const unsigned int p[], BN_
 | 
			
		||||
	bn_check_top(a);
 | 
			
		||||
 | 
			
		||||
	if (!p[0])
 | 
			
		||||
		{
 | 
			
		||||
		/* reduction mod 1 => return 0 */
 | 
			
		||||
		return BN_zero(r);
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	BN_CTX_start(ctx);
 | 
			
		||||
	if ((u = BN_CTX_get(ctx)) == NULL) goto err;
 | 
			
		||||
	
 | 
			
		||||
	if (!BN_zero(u)) goto err;
 | 
			
		||||
	if (!BN_set_bit(u, p[0] - 1)) goto err;
 | 
			
		||||
	ret = BN_GF2m_mod_exp_arr(r, a, u, p, ctx);
 | 
			
		||||
	bn_check_top(r);
 | 
			
		||||
@@ -921,8 +924,11 @@ int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a_, const unsigned int p
 | 
			
		||||
	bn_check_top(a_);
 | 
			
		||||
 | 
			
		||||
	if (!p[0])
 | 
			
		||||
		{
 | 
			
		||||
		/* reduction mod 1 => return 0 */
 | 
			
		||||
		return BN_zero(r);
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	BN_CTX_start(ctx);
 | 
			
		||||
	a = BN_CTX_get(ctx);
 | 
			
		||||
@@ -934,7 +940,8 @@ int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a_, const unsigned int p
 | 
			
		||||
	
 | 
			
		||||
	if (BN_is_zero(a))
 | 
			
		||||
		{
 | 
			
		||||
		ret = BN_zero(r);
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		goto err;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -960,7 +967,7 @@ int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a_, const unsigned int p
 | 
			
		||||
			{
 | 
			
		||||
			if (!BN_rand(rho, p[0], 0, 0)) goto err;
 | 
			
		||||
			if (!BN_GF2m_mod_arr(rho, rho, p)) goto err;
 | 
			
		||||
			if (!BN_zero(z)) goto err;
 | 
			
		||||
			BN_zero(z);
 | 
			
		||||
			if (!BN_copy(w, rho)) goto err;
 | 
			
		||||
			for (j = 1; j <= p[0] - 1; j++)
 | 
			
		||||
				{
 | 
			
		||||
 
 | 
			
		||||
@@ -240,7 +240,7 @@ extern "C" {
 | 
			
		||||
#define Lw(t)    (((BN_ULONG)(t))&BN_MASK2)
 | 
			
		||||
#define Hw(t)    (((BN_ULONG)((t)>>BN_BITS2))&BN_MASK2)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef BN_DEBUG_RAND
 | 
			
		||||
#define bn_clear_top2max(a) \
 | 
			
		||||
	{ \
 | 
			
		||||
	int      ind = (a)->dmax - (a)->top; \
 | 
			
		||||
@@ -248,6 +248,9 @@ extern "C" {
 | 
			
		||||
	for (; ind != 0; ind--) \
 | 
			
		||||
		*(++ftl) = 0x0; \
 | 
			
		||||
	}
 | 
			
		||||
#else
 | 
			
		||||
#define bn_clear_top2max(a)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef BN_LLONG
 | 
			
		||||
#define mul_add(r,a,w,c) { \
 | 
			
		||||
 
 | 
			
		||||
@@ -149,7 +149,7 @@ int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, BN_
 | 
			
		||||
 * and less than  m */
 | 
			
		||||
int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m)
 | 
			
		||||
	{
 | 
			
		||||
	if (!BN_add(r, a, b)) return 0;
 | 
			
		||||
	if (!BN_uadd(r, a, b)) return 0;
 | 
			
		||||
	if (BN_ucmp(r, m) >= 0)
 | 
			
		||||
		return BN_usub(r, r, m);
 | 
			
		||||
	return 1;
 | 
			
		||||
 
 | 
			
		||||
@@ -284,7 +284,7 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx)
 | 
			
		||||
		BN_ULONG buf[2];
 | 
			
		||||
 | 
			
		||||
		mont->ri=(BN_num_bits(mod)+(BN_BITS2-1))/BN_BITS2*BN_BITS2;
 | 
			
		||||
		if (!(BN_zero(R))) goto err;
 | 
			
		||||
		BN_zero(R);
 | 
			
		||||
		if (!(BN_set_bit(R,BN_BITS2))) goto err;	/* R */
 | 
			
		||||
 | 
			
		||||
		buf[0]=mod->d[0]; /* tmod = N mod word size */
 | 
			
		||||
@@ -314,7 +314,7 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx)
 | 
			
		||||
#else /* !MONT_WORD */
 | 
			
		||||
		{ /* bignum version */
 | 
			
		||||
		mont->ri=BN_num_bits(&mont->N);
 | 
			
		||||
		if (!BN_zero(R)) goto err;
 | 
			
		||||
		BN_zero(R);
 | 
			
		||||
		if (!BN_set_bit(R,mont->ri)) goto err;  /* R = 2^ri */
 | 
			
		||||
		                                        /* Ri = R^-1 mod N*/
 | 
			
		||||
		if ((BN_mod_inverse(&Ri,R,&mont->N,ctx)) == NULL)
 | 
			
		||||
@@ -328,7 +328,7 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* setup RR for conversions */
 | 
			
		||||
	if (!BN_zero(&(mont->RR))) goto err;
 | 
			
		||||
	BN_zero(&(mont->RR));
 | 
			
		||||
	if (!BN_set_bit(&(mont->RR),mont->ri*2)) goto err;
 | 
			
		||||
	if (!BN_mod(&(mont->RR),&(mont->RR),&(mont->N),ctx)) goto err;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -964,7 +964,7 @@ int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx)
 | 
			
		||||
 | 
			
		||||
	if ((al == 0) || (bl == 0))
 | 
			
		||||
		{
 | 
			
		||||
		if (!BN_zero(r)) goto err;
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
		return(1);
 | 
			
		||||
		}
 | 
			
		||||
	top=al+bl;
 | 
			
		||||
@@ -1094,8 +1094,8 @@ end:
 | 
			
		||||
	if (r != rr) BN_copy(r,rr);
 | 
			
		||||
	ret=1;
 | 
			
		||||
err:
 | 
			
		||||
	BN_CTX_end(ctx);
 | 
			
		||||
	bn_check_top(r);
 | 
			
		||||
	BN_CTX_end(ctx);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -63,19 +63,25 @@
 | 
			
		||||
#define BN_NIST_521_TOP	(521+BN_BITS2-1)/BN_BITS2
 | 
			
		||||
 | 
			
		||||
#if BN_BITS2 == 64
 | 
			
		||||
const static BN_ULONG _nist_p_192[] = {0xFFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFFE,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFF};
 | 
			
		||||
const static BN_ULONG _nist_p_224[] = {0x0000000000000001,0xFFFFFFFF00000000,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFF,0x00000000FFFFFFFF};
 | 
			
		||||
const static BN_ULONG _nist_p_256[] = {0xFFFFFFFFFFFFFFFF,0x00000000FFFFFFFF,
 | 
			
		||||
	0x0000000000000000,0xFFFFFFFF00000001};
 | 
			
		||||
const static BN_ULONG _nist_p_384[] = {0x00000000FFFFFFFF,0xFFFFFFFF00000000,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFE,0xFFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFFF,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFF};
 | 
			
		||||
const static BN_ULONG _nist_p_521[] = {0xFFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFFF,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFFF,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFFF,
 | 
			
		||||
	0x00000000000001FF};
 | 
			
		||||
const static BN_ULONG _nist_p_192[] =
 | 
			
		||||
	{0xFFFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFEULL,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFFULL};
 | 
			
		||||
const static BN_ULONG _nist_p_224[] =
 | 
			
		||||
	{0x0000000000000001ULL,0xFFFFFFFF00000000ULL,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFFULL,0x00000000FFFFFFFFULL};
 | 
			
		||||
const static BN_ULONG _nist_p_256[] =
 | 
			
		||||
	{0xFFFFFFFFFFFFFFFFULL,0x00000000FFFFFFFFULL,
 | 
			
		||||
	0x0000000000000000ULL,0xFFFFFFFF00000001ULL};
 | 
			
		||||
const static BN_ULONG _nist_p_384[] =
 | 
			
		||||
	{0x00000000FFFFFFFFULL,0xFFFFFFFF00000000ULL,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFEULL,0xFFFFFFFFFFFFFFFFULL,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL};
 | 
			
		||||
const static BN_ULONG _nist_p_521[] =
 | 
			
		||||
	{0xFFFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL,
 | 
			
		||||
	0xFFFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL,
 | 
			
		||||
	0x00000000000001FFULL};
 | 
			
		||||
#elif BN_BITS2 == 32
 | 
			
		||||
const static BN_ULONG _nist_p_192[] = {0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFE,
 | 
			
		||||
	0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF};
 | 
			
		||||
@@ -313,7 +319,10 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
 | 
			
		||||
 | 
			
		||||
	top = BN_ucmp(field, a);
 | 
			
		||||
	if (top == 0)
 | 
			
		||||
		return BN_zero(r);
 | 
			
		||||
		{
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
	else if (top > 0)
 | 
			
		||||
		return (r == a)? 1 : (BN_copy(r ,a) != NULL);
 | 
			
		||||
 | 
			
		||||
@@ -353,12 +362,7 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
 | 
			
		||||
			--carry; 
 | 
			
		||||
		}
 | 
			
		||||
	r->top = BN_NIST_192_TOP;
 | 
			
		||||
 | 
			
		||||
#if 1
 | 
			
		||||
	bn_clear_top2max(r);
 | 
			
		||||
#endif
 | 
			
		||||
	bn_correct_top(r);
 | 
			
		||||
 | 
			
		||||
	if (BN_ucmp(r, field) >= 0)
 | 
			
		||||
		{
 | 
			
		||||
		bn_sub_words(r_d, r_d, _nist_p_192, BN_NIST_192_TOP);
 | 
			
		||||
@@ -393,7 +397,10 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
 | 
			
		||||
 | 
			
		||||
	tmp_int = BN_ucmp(field, a);
 | 
			
		||||
	if (tmp_int == 0)
 | 
			
		||||
		return BN_zero(r);
 | 
			
		||||
		{
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
	else if (tmp_int > 0)
 | 
			
		||||
		return (r == a)? 1 : (BN_copy(r ,a) != NULL);
 | 
			
		||||
 | 
			
		||||
@@ -447,11 +454,7 @@ int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
	r->top = BN_NIST_224_TOP;
 | 
			
		||||
#if 1
 | 
			
		||||
	bn_clear_top2max(r);
 | 
			
		||||
#endif
 | 
			
		||||
	bn_correct_top(r);
 | 
			
		||||
 | 
			
		||||
	if (BN_ucmp(r, field) >= 0)
 | 
			
		||||
		{
 | 
			
		||||
		bn_sub_words(r_d, r_d, _nist_p_224, BN_NIST_224_TOP);
 | 
			
		||||
@@ -517,7 +520,10 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
 | 
			
		||||
	
 | 
			
		||||
	tmp_int = BN_ucmp(field, a);
 | 
			
		||||
	if (tmp_int == 0)
 | 
			
		||||
		return BN_zero(r);
 | 
			
		||||
		{
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
	else if (tmp_int > 0)
 | 
			
		||||
		return (r == a)? 1 : (BN_copy(r ,a) != NULL);
 | 
			
		||||
 | 
			
		||||
@@ -606,11 +612,7 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	r->top = BN_NIST_256_TOP;
 | 
			
		||||
#if 1
 | 
			
		||||
	bn_clear_top2max(r);
 | 
			
		||||
#endif
 | 
			
		||||
	bn_correct_top(r);
 | 
			
		||||
 | 
			
		||||
	if (BN_ucmp(r, field) >= 0)
 | 
			
		||||
		{
 | 
			
		||||
		bn_sub_words(r_d, r_d, _nist_p_256, BN_NIST_256_TOP);
 | 
			
		||||
@@ -679,7 +681,10 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
 | 
			
		||||
 | 
			
		||||
	tmp_int = BN_ucmp(field, a);
 | 
			
		||||
	if (tmp_int == 0)
 | 
			
		||||
		return BN_zero(r);
 | 
			
		||||
		{
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
	else if (tmp_int > 0)
 | 
			
		||||
		return (r == a)? 1 : (BN_copy(r ,a) != NULL);
 | 
			
		||||
 | 
			
		||||
@@ -775,11 +780,7 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	r->top = BN_NIST_384_TOP;
 | 
			
		||||
#if 1
 | 
			
		||||
	bn_clear_top2max(r);
 | 
			
		||||
#endif
 | 
			
		||||
	bn_correct_top(r);
 | 
			
		||||
 | 
			
		||||
	if (BN_ucmp(r, field) >= 0)
 | 
			
		||||
		{
 | 
			
		||||
		bn_sub_words(r_d, r_d, _nist_p_384, BN_NIST_384_TOP);
 | 
			
		||||
 
 | 
			
		||||
@@ -244,9 +244,7 @@ static int bn_rand_range(int pseudo, BIGNUM *r, BIGNUM *range)
 | 
			
		||||
	/* BN_is_bit_set(range, n - 1) always holds */
 | 
			
		||||
 | 
			
		||||
	if (n == 1)
 | 
			
		||||
		{
 | 
			
		||||
		if (!BN_zero(r)) return 0;
 | 
			
		||||
		}
 | 
			
		||||
		BN_zero(r);
 | 
			
		||||
	else if (!BN_is_bit_set(range, n - 2) && !BN_is_bit_set(range, n - 3))
 | 
			
		||||
		{
 | 
			
		||||
		/* range = 100..._2,
 | 
			
		||||
 
 | 
			
		||||
@@ -94,7 +94,7 @@ void BN_RECP_CTX_free(BN_RECP_CTX *recp)
 | 
			
		||||
int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *d, BN_CTX *ctx)
 | 
			
		||||
	{
 | 
			
		||||
	if (!BN_copy(&(recp->N),d)) return 0;
 | 
			
		||||
	if (!BN_zero(&(recp->Nr))) return 0;
 | 
			
		||||
	BN_zero(&(recp->Nr));
 | 
			
		||||
	recp->num_bits=BN_num_bits(d);
 | 
			
		||||
	recp->shift=0;
 | 
			
		||||
	return(1);
 | 
			
		||||
@@ -148,7 +148,7 @@ int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m,
 | 
			
		||||
 | 
			
		||||
	if (BN_ucmp(m,&(recp->N)) < 0)
 | 
			
		||||
		{
 | 
			
		||||
		if (!BN_zero(d)) return 0;
 | 
			
		||||
		BN_zero(d);
 | 
			
		||||
		if (!BN_copy(r,m)) return 0;
 | 
			
		||||
		BN_CTX_end(ctx);
 | 
			
		||||
		return(1);
 | 
			
		||||
@@ -221,7 +221,6 @@ int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx)
 | 
			
		||||
 | 
			
		||||
	BN_init(&t);
 | 
			
		||||
 | 
			
		||||
	if (!BN_zero(&t)) goto err;
 | 
			
		||||
	if (!BN_set_bit(&t,len)) goto err;
 | 
			
		||||
 | 
			
		||||
	if (!BN_div(r,NULL,&t,m,ctx)) goto err;
 | 
			
		||||
 
 | 
			
		||||
@@ -77,15 +77,15 @@ int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx)
 | 
			
		||||
	if (al <= 0)
 | 
			
		||||
		{
 | 
			
		||||
		r->top=0;
 | 
			
		||||
		return(1);
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	BN_CTX_start(ctx);
 | 
			
		||||
	rr=(a != r) ? r : BN_CTX_get(ctx);
 | 
			
		||||
	tmp=BN_CTX_get(ctx);
 | 
			
		||||
	if (tmp == NULL) goto err;
 | 
			
		||||
	if (!rr || !tmp) goto err;
 | 
			
		||||
 | 
			
		||||
	max=(al+al);
 | 
			
		||||
	max = 2 * al; /* Non-zero (from above) */
 | 
			
		||||
	if (bn_wexpand(rr,max+1) == NULL) goto err;
 | 
			
		||||
 | 
			
		||||
	if (al == 4)
 | 
			
		||||
@@ -138,14 +138,19 @@ int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx)
 | 
			
		||||
#endif
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	rr->top=max;
 | 
			
		||||
	rr->neg=0;
 | 
			
		||||
	if ((max > 0) && (rr->d[max-1] == 0)) rr->top--;
 | 
			
		||||
	/* If the most-significant half of the top word of 'a' is zero, then
 | 
			
		||||
	 * the square of 'a' will max-1 words. */
 | 
			
		||||
	if(a->d[al - 1] == (a->d[al - 1] & BN_MASK2l))
 | 
			
		||||
		rr->top = max - 1;
 | 
			
		||||
	else
 | 
			
		||||
		rr->top = max;
 | 
			
		||||
	if (rr != r) BN_copy(r,rr);
 | 
			
		||||
	ret = 1;
 | 
			
		||||
 err:
 | 
			
		||||
	if(rr) bn_check_top(rr);
 | 
			
		||||
	if(tmp) bn_check_top(tmp);
 | 
			
		||||
	BN_CTX_end(ctx);
 | 
			
		||||
	bn_check_top(r);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -288,7 +288,7 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
 | 
			
		||||
		if (BN_is_zero(t))
 | 
			
		||||
			{
 | 
			
		||||
			/* special case: a == 0  (mod p) */
 | 
			
		||||
			if (!BN_zero(ret)) goto end;
 | 
			
		||||
			BN_zero(ret);
 | 
			
		||||
			err = 0;
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
@@ -301,7 +301,7 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx)
 | 
			
		||||
		if (BN_is_zero(x))
 | 
			
		||||
			{
 | 
			
		||||
			/* special case: a == 0  (mod p) */
 | 
			
		||||
			if (!BN_zero(ret)) goto end;
 | 
			
		||||
			BN_zero(ret);
 | 
			
		||||
			err = 0;
 | 
			
		||||
			goto end;
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -196,13 +196,13 @@ ecb3_enc.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
 | 
			
		||||
ecb3_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
ecb3_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
 | 
			
		||||
ecb3_enc.o: des_locl.h ecb3_enc.c
 | 
			
		||||
ecb_enc.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/ui_compat.h des_locl.h des_ver.h ecb_enc.c
 | 
			
		||||
ecb_enc.o: spr.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/bio.h ../../include/openssl/crypto.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/des.h ../../include/openssl/des_old.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/e_os2.h ../../include/openssl/opensslconf.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/opensslv.h ../../include/openssl/safestack.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
 | 
			
		||||
ecb_enc.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
 | 
			
		||||
ecb_enc.o: des_locl.h des_ver.h ecb_enc.c spr.h
 | 
			
		||||
ede_cbcm_enc.o: ../../include/openssl/crypto.h ../../include/openssl/des.h
 | 
			
		||||
ede_cbcm_enc.o: ../../include/openssl/des_old.h ../../include/openssl/e_os2.h
 | 
			
		||||
ede_cbcm_enc.o: ../../include/openssl/opensslconf.h
 | 
			
		||||
 
 | 
			
		||||
@@ -140,3 +140,114 @@ void DES_ede2_cfb64_encrypt(unsigned char *in, unsigned char *out, long length,
 | 
			
		||||
	DES_ede3_cfb64_encrypt(in,out,length,ks1,ks2,ks1,ivec,num,enc);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* This is compatible with the single key CFB-r for DES, even thought that's
 | 
			
		||||
 * not what EVP needs.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void DES_ede3_cfb_encrypt(const unsigned char *in,unsigned char *out,
 | 
			
		||||
			  int numbits,long length,DES_key_schedule *ks1,
 | 
			
		||||
			  DES_key_schedule *ks2,DES_key_schedule *ks3,
 | 
			
		||||
			  DES_cblock *ivec,int enc)
 | 
			
		||||
	{
 | 
			
		||||
	register DES_LONG d0,d1,v0,v1;
 | 
			
		||||
	register unsigned long l=length,n=((unsigned int)numbits+7)/8;
 | 
			
		||||
	register int num=numbits,i;
 | 
			
		||||
	DES_LONG ti[2];
 | 
			
		||||
	unsigned char *iv;
 | 
			
		||||
	unsigned char ovec[16];
 | 
			
		||||
 | 
			
		||||
	if (num > 64) return;
 | 
			
		||||
	iv = &(*ivec)[0];
 | 
			
		||||
	c2l(iv,v0);
 | 
			
		||||
	c2l(iv,v1);
 | 
			
		||||
	if (enc)
 | 
			
		||||
		{
 | 
			
		||||
		while (l >= n)
 | 
			
		||||
			{
 | 
			
		||||
			l-=n;
 | 
			
		||||
			ti[0]=v0;
 | 
			
		||||
			ti[1]=v1;
 | 
			
		||||
			DES_encrypt3(ti,ks1,ks2,ks3);
 | 
			
		||||
			c2ln(in,d0,d1,n);
 | 
			
		||||
			in+=n;
 | 
			
		||||
			d0^=ti[0];
 | 
			
		||||
			d1^=ti[1];
 | 
			
		||||
			l2cn(d0,d1,out,n);
 | 
			
		||||
			out+=n;
 | 
			
		||||
			/* 30-08-94 - eay - changed because l>>32 and
 | 
			
		||||
			 * l<<32 are bad under gcc :-( */
 | 
			
		||||
			if (num == 32)
 | 
			
		||||
				{ v0=v1; v1=d0; }
 | 
			
		||||
			else if (num == 64)
 | 
			
		||||
				{ v0=d0; v1=d1; }
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				iv=&ovec[0];
 | 
			
		||||
				l2c(v0,iv);
 | 
			
		||||
				l2c(v1,iv);
 | 
			
		||||
				l2c(d0,iv);
 | 
			
		||||
				l2c(d1,iv);
 | 
			
		||||
				/* shift ovec left most of the bits... */
 | 
			
		||||
				memmove(ovec,ovec+num/8,8+(num%8 ? 1 : 0));
 | 
			
		||||
				/* now the remaining bits */
 | 
			
		||||
				if(num%8 != 0)
 | 
			
		||||
					for(i=0 ; i < 8 ; ++i)
 | 
			
		||||
						{
 | 
			
		||||
						ovec[i]<<=num%8;
 | 
			
		||||
						ovec[i]|=ovec[i+1]>>(8-num%8);
 | 
			
		||||
						}
 | 
			
		||||
				iv=&ovec[0];
 | 
			
		||||
				c2l(iv,v0);
 | 
			
		||||
				c2l(iv,v1);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		while (l >= n)
 | 
			
		||||
			{
 | 
			
		||||
			l-=n;
 | 
			
		||||
			ti[0]=v0;
 | 
			
		||||
			ti[1]=v1;
 | 
			
		||||
			DES_encrypt3(ti,ks1,ks2,ks3);
 | 
			
		||||
			c2ln(in,d0,d1,n);
 | 
			
		||||
			in+=n;
 | 
			
		||||
			/* 30-08-94 - eay - changed because l>>32 and
 | 
			
		||||
			 * l<<32 are bad under gcc :-( */
 | 
			
		||||
			if (num == 32)
 | 
			
		||||
				{ v0=v1; v1=d0; }
 | 
			
		||||
			else if (num == 64)
 | 
			
		||||
				{ v0=d0; v1=d1; }
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				iv=&ovec[0];
 | 
			
		||||
				l2c(v0,iv);
 | 
			
		||||
				l2c(v1,iv);
 | 
			
		||||
				l2c(d0,iv);
 | 
			
		||||
				l2c(d1,iv);
 | 
			
		||||
				/* shift ovec left most of the bits... */
 | 
			
		||||
				memmove(ovec,ovec+num/8,8+(num%8 ? 1 : 0));
 | 
			
		||||
				/* now the remaining bits */
 | 
			
		||||
				if(num%8 != 0)
 | 
			
		||||
					for(i=0 ; i < 8 ; ++i)
 | 
			
		||||
						{
 | 
			
		||||
						ovec[i]<<=num%8;
 | 
			
		||||
						ovec[i]|=ovec[i+1]>>(8-num%8);
 | 
			
		||||
						}
 | 
			
		||||
				iv=&ovec[0];
 | 
			
		||||
				c2l(iv,v0);
 | 
			
		||||
				c2l(iv,v1);
 | 
			
		||||
				}
 | 
			
		||||
			d0^=ti[0];
 | 
			
		||||
			d1^=ti[1];
 | 
			
		||||
			l2cn(d0,d1,out,n);
 | 
			
		||||
			out+=n;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	iv = &(*ivec)[0];
 | 
			
		||||
	l2c(v0,iv);
 | 
			
		||||
	l2c(v1,iv);
 | 
			
		||||
	v0=v1=d0=d1=ti[0]=ti[1]=0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -65,38 +65,26 @@
 | 
			
		||||
 * the second.  The second 12 bits will come from the 3rd and half the 4th
 | 
			
		||||
 * byte.
 | 
			
		||||
 */
 | 
			
		||||
/* Until Aug 1 2003 this function did not correctly implement CFB-r, so it
 | 
			
		||||
 * will not be compatible with any encryption prior to that date. Ben. */
 | 
			
		||||
void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
 | 
			
		||||
		     long length, DES_key_schedule *schedule, DES_cblock *ivec, int enc)
 | 
			
		||||
		     long length, DES_key_schedule *schedule, DES_cblock *ivec,
 | 
			
		||||
		     int enc)
 | 
			
		||||
	{
 | 
			
		||||
	register DES_LONG d0,d1,v0,v1,n=(numbits+7)/8;
 | 
			
		||||
	register DES_LONG mask0,mask1;
 | 
			
		||||
	register DES_LONG d0,d1,v0,v1;
 | 
			
		||||
	register unsigned long l=length;
 | 
			
		||||
	register int num=numbits;
 | 
			
		||||
	register int num=numbits,n=(numbits+7)/8,i;
 | 
			
		||||
	DES_LONG ti[2];
 | 
			
		||||
	unsigned char *iv;
 | 
			
		||||
	unsigned char ovec[16];
 | 
			
		||||
 | 
			
		||||
	if (num > 64) return;
 | 
			
		||||
	if (num > 32)
 | 
			
		||||
		{
 | 
			
		||||
		mask0=0xffffffffL;
 | 
			
		||||
		if (num == 64)
 | 
			
		||||
			mask1=mask0;
 | 
			
		||||
		else	mask1=(1L<<(num-32))-1;
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		if (num == 32)
 | 
			
		||||
			mask0=0xffffffffL;
 | 
			
		||||
		else	mask0=(1L<<num)-1;
 | 
			
		||||
		mask1=0x00000000L;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	iv = &(*ivec)[0];
 | 
			
		||||
	c2l(iv,v0);
 | 
			
		||||
	c2l(iv,v1);
 | 
			
		||||
	if (enc)
 | 
			
		||||
		{
 | 
			
		||||
		while (l >= n)
 | 
			
		||||
		while (l >= (unsigned long)n)
 | 
			
		||||
			{
 | 
			
		||||
			l-=n;
 | 
			
		||||
			ti[0]=v0;
 | 
			
		||||
@@ -104,8 +92,8 @@ void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
 | 
			
		||||
			DES_encrypt1((DES_LONG *)ti,schedule,DES_ENCRYPT);
 | 
			
		||||
			c2ln(in,d0,d1,n);
 | 
			
		||||
			in+=n;
 | 
			
		||||
			d0=(d0^ti[0])&mask0;
 | 
			
		||||
			d1=(d1^ti[1])&mask1;
 | 
			
		||||
			d0^=ti[0];
 | 
			
		||||
			d1^=ti[1];
 | 
			
		||||
			l2cn(d0,d1,out,n);
 | 
			
		||||
			out+=n;
 | 
			
		||||
			/* 30-08-94 - eay - changed because l>>32 and
 | 
			
		||||
@@ -114,21 +102,31 @@ void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
 | 
			
		||||
				{ v0=v1; v1=d0; }
 | 
			
		||||
			else if (num == 64)
 | 
			
		||||
				{ v0=d0; v1=d1; }
 | 
			
		||||
			else if (num > 32) /* && num != 64 */
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				v0=((v1>>(num-32))|(d0<<(64-num)))&0xffffffffL;
 | 
			
		||||
				v1=((d0>>(num-32))|(d1<<(64-num)))&0xffffffffL;
 | 
			
		||||
				}
 | 
			
		||||
			else /* num < 32 */
 | 
			
		||||
				{
 | 
			
		||||
				v0=((v0>>num)|(v1<<(32-num)))&0xffffffffL;
 | 
			
		||||
				v1=((v1>>num)|(d0<<(32-num)))&0xffffffffL;
 | 
			
		||||
				iv=&ovec[0];
 | 
			
		||||
				l2c(v0,iv);
 | 
			
		||||
				l2c(v1,iv);
 | 
			
		||||
				l2c(d0,iv);
 | 
			
		||||
				l2c(d1,iv);
 | 
			
		||||
				/* shift ovec left most of the bits... */
 | 
			
		||||
				memmove(ovec,ovec+num/8,8+(num%8 ? 1 : 0));
 | 
			
		||||
				/* now the remaining bits */
 | 
			
		||||
				if(num%8 != 0)
 | 
			
		||||
					for(i=0 ; i < 8 ; ++i)
 | 
			
		||||
						{
 | 
			
		||||
						ovec[i]<<=num%8;
 | 
			
		||||
						ovec[i]|=ovec[i+1]>>(8-num%8);
 | 
			
		||||
						}
 | 
			
		||||
				iv=&ovec[0];
 | 
			
		||||
				c2l(iv,v0);
 | 
			
		||||
				c2l(iv,v1);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	else
 | 
			
		||||
		{
 | 
			
		||||
		while (l >= n)
 | 
			
		||||
		while (l >= (unsigned long)n)
 | 
			
		||||
			{
 | 
			
		||||
			l-=n;
 | 
			
		||||
			ti[0]=v0;
 | 
			
		||||
@@ -142,18 +140,28 @@ void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
 | 
			
		||||
				{ v0=v1; v1=d0; }
 | 
			
		||||
			else if (num == 64)
 | 
			
		||||
				{ v0=d0; v1=d1; }
 | 
			
		||||
			else if (num > 32) /* && num != 64 */
 | 
			
		||||
			else
 | 
			
		||||
				{
 | 
			
		||||
				v0=((v1>>(num-32))|(d0<<(64-num)))&0xffffffffL;
 | 
			
		||||
				v1=((d0>>(num-32))|(d1<<(64-num)))&0xffffffffL;
 | 
			
		||||
				iv=&ovec[0];
 | 
			
		||||
				l2c(v0,iv);
 | 
			
		||||
				l2c(v1,iv);
 | 
			
		||||
				l2c(d0,iv);
 | 
			
		||||
				l2c(d1,iv);
 | 
			
		||||
				/* shift ovec left most of the bits... */
 | 
			
		||||
				memmove(ovec,ovec+num/8,8+(num%8 ? 1 : 0));
 | 
			
		||||
				/* now the remaining bits */
 | 
			
		||||
				if(num%8 != 0)
 | 
			
		||||
					for(i=0 ; i < 8 ; ++i)
 | 
			
		||||
						{
 | 
			
		||||
						ovec[i]<<=num%8;
 | 
			
		||||
						ovec[i]|=ovec[i+1]>>(8-num%8);
 | 
			
		||||
						}
 | 
			
		||||
				iv=&ovec[0];
 | 
			
		||||
				c2l(iv,v0);
 | 
			
		||||
				c2l(iv,v1);
 | 
			
		||||
				}
 | 
			
		||||
			else /* num < 32 */
 | 
			
		||||
				{
 | 
			
		||||
				v0=((v0>>num)|(v1<<(32-num)))&0xffffffffL;
 | 
			
		||||
				v1=((v1>>num)|(d0<<(32-num)))&0xffffffffL;
 | 
			
		||||
				}
 | 
			
		||||
			d0=(d0^ti[0])&mask0;
 | 
			
		||||
			d1=(d1^ti[1])&mask1;
 | 
			
		||||
			d0^=ti[0];
 | 
			
		||||
			d1^=ti[1];
 | 
			
		||||
			l2cn(d0,d1,out,n);
 | 
			
		||||
			out+=n;
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -187,6 +187,10 @@ void DES_ede3_cfb64_encrypt(const unsigned char *in,unsigned char *out,
 | 
			
		||||
			    long length,DES_key_schedule *ks1,
 | 
			
		||||
			    DES_key_schedule *ks2,DES_key_schedule *ks3,
 | 
			
		||||
			    DES_cblock *ivec,int *num,int enc);
 | 
			
		||||
void DES_ede3_cfb_encrypt(const unsigned char *in,unsigned char *out,
 | 
			
		||||
			  int numbits,long length,DES_key_schedule *ks1,
 | 
			
		||||
			  DES_key_schedule *ks2,DES_key_schedule *ks3,
 | 
			
		||||
			  DES_cblock *ivec,int enc);
 | 
			
		||||
void DES_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out,
 | 
			
		||||
			    long length,DES_key_schedule *ks1,
 | 
			
		||||
			    DES_key_schedule *ks2,DES_key_schedule *ks3,
 | 
			
		||||
 
 | 
			
		||||
@@ -84,6 +84,10 @@
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#elif defined(__SUNPRO_C)
 | 
			
		||||
# if __SUNPRO_C >= 0x520
 | 
			
		||||
# pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE)
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -501,5 +505,9 @@ void ERR_load_EC_strings(void);
 | 
			
		||||
 | 
			
		||||
#ifdef  __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#elif defined(__SUNPRO_C)
 | 
			
		||||
# if __SUNPRO_C >= 0x520
 | 
			
		||||
# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE)
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -155,8 +155,8 @@ static int gf2m_Mxy(const EC_GROUP *group, const BIGNUM *x, const BIGNUM *y, BIG
 | 
			
		||||
	
 | 
			
		||||
	if (BN_is_zero(z1))
 | 
			
		||||
		{
 | 
			
		||||
		if (!BN_zero(x2)) return 0;
 | 
			
		||||
		if (!BN_zero(z2)) return 0;
 | 
			
		||||
		BN_zero(x2);
 | 
			
		||||
		BN_zero(z2);
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -335,7 +335,8 @@ int ec_GF2m_simple_point_copy(EC_POINT *dest, const EC_POINT *src)
 | 
			
		||||
int ec_GF2m_simple_point_set_to_infinity(const EC_GROUP *group, EC_POINT *point)
 | 
			
		||||
	{
 | 
			
		||||
	point->Z_is_one = 0;
 | 
			
		||||
	return (BN_zero(&point->Z));
 | 
			
		||||
	BN_zero(&point->Z);
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -574,7 +575,7 @@ int ec_GF2m_simple_oct2point(const EC_GROUP *group, EC_POINT *point,
 | 
			
		||||
		}
 | 
			
		||||
	form = buf[0];
 | 
			
		||||
	y_bit = form & 1;
 | 
			
		||||
	form = form & ~1;
 | 
			
		||||
	form = form & ~1U;
 | 
			
		||||
	if ((form != 0)	&& (form != POINT_CONVERSION_COMPRESSED)
 | 
			
		||||
		&& (form != POINT_CONVERSION_UNCOMPRESSED)
 | 
			
		||||
		&& (form != POINT_CONVERSION_HYBRID))
 | 
			
		||||
 
 | 
			
		||||
@@ -75,6 +75,11 @@
 | 
			
		||||
#include <openssl/obj_mac.h>
 | 
			
		||||
#include <openssl/ec.h>
 | 
			
		||||
 | 
			
		||||
#if defined(__SUNPRO_C)
 | 
			
		||||
# if __SUNPRO_C >= 0x520
 | 
			
		||||
# pragma error_messages (off,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE)
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Structure details are not part of the exported interface,
 | 
			
		||||
 * so all this may change in future versions. */
 | 
			
		||||
 
 | 
			
		||||
@@ -299,12 +299,12 @@ int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIG
 | 
			
		||||
	if (order != NULL)
 | 
			
		||||
		{ if (!BN_copy(&group->order, order)) return 0; }	
 | 
			
		||||
	else
 | 
			
		||||
		{ if (!BN_zero(&group->order)) return 0; }	
 | 
			
		||||
		BN_zero(&group->order);
 | 
			
		||||
 | 
			
		||||
	if (cofactor != NULL)
 | 
			
		||||
		{ if (!BN_copy(&group->cofactor, cofactor)) return 0; }	
 | 
			
		||||
	else
 | 
			
		||||
		{ if (!BN_zero(&group->cofactor)) return 0; }	
 | 
			
		||||
		BN_zero(&group->cofactor);
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -385,7 +385,8 @@ int ec_GFp_simple_point_copy(EC_POINT *dest, const EC_POINT *src)
 | 
			
		||||
int ec_GFp_simple_point_set_to_infinity(const EC_GROUP *group, EC_POINT *point)
 | 
			
		||||
	{
 | 
			
		||||
	point->Z_is_one = 0;
 | 
			
		||||
	return (BN_zero(&point->Z));
 | 
			
		||||
	BN_zero(&point->Z);
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -901,7 +902,7 @@ int ec_GFp_simple_oct2point(const EC_GROUP *group, EC_POINT *point,
 | 
			
		||||
		}
 | 
			
		||||
	form = buf[0];
 | 
			
		||||
	y_bit = form & 1;
 | 
			
		||||
	form = form & ~1;
 | 
			
		||||
	form = form & ~1U;
 | 
			
		||||
	if ((form != 0)	&& (form != POINT_CONVERSION_COMPRESSED)
 | 
			
		||||
		&& (form != POINT_CONVERSION_UNCOMPRESSED)
 | 
			
		||||
		&& (form != POINT_CONVERSION_HYBRID))
 | 
			
		||||
@@ -1093,7 +1094,7 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, con
 | 
			
		||||
		else
 | 
			
		||||
			{
 | 
			
		||||
			/* a is the inverse of b */
 | 
			
		||||
			if (!BN_zero(&r->Z)) goto end;
 | 
			
		||||
			BN_zero(&r->Z);
 | 
			
		||||
			r->Z_is_one = 0;
 | 
			
		||||
			ret = 1;
 | 
			
		||||
			goto end;
 | 
			
		||||
@@ -1169,7 +1170,7 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_
 | 
			
		||||
	
 | 
			
		||||
	if (EC_POINT_is_at_infinity(group, a))
 | 
			
		||||
		{
 | 
			
		||||
		if (!BN_zero(&r->Z)) return 0;
 | 
			
		||||
		BN_zero(&r->Z);
 | 
			
		||||
		r->Z_is_one = 0;
 | 
			
		||||
		return 1;
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,10 @@
 | 
			
		||||
/* crypto/ecdsa/ecdsa.h */
 | 
			
		||||
/**
 | 
			
		||||
 * \file   crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions
 | 
			
		||||
 * \author Written by Nils Larsch for the OpenSSL project
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 2000-2002 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 2000-2003 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
 | 
			
		||||
@@ -96,7 +100,7 @@ typedef struct ecdsa_data_st {
 | 
			
		||||
	/* EC_KEY_METH_DATA part */
 | 
			
		||||
	int (*init)(EC_KEY *);
 | 
			
		||||
	void (*finish)(EC_KEY *);
 | 
			
		||||
	/* method specific part */
 | 
			
		||||
	/* method (ECDSA) specific part */
 | 
			
		||||
	BIGNUM	*kinv;	/* signing pre-calc */
 | 
			
		||||
	BIGNUM	*r;	/* signing pre-calc */
 | 
			
		||||
	ENGINE	*engine;
 | 
			
		||||
@@ -105,38 +109,157 @@ typedef struct ecdsa_data_st {
 | 
			
		||||
	CRYPTO_EX_DATA ex_data;
 | 
			
		||||
} ECDSA_DATA; 
 | 
			
		||||
 | 
			
		||||
/* signature functions */
 | 
			
		||||
/** ECDSA_SIG *ECDSA_SIG_new(void)
 | 
			
		||||
 * allocates and initialize a ECDSA_SIG structure
 | 
			
		||||
 * \return pointer to a ECDSA_SIG structure or NULL if an error occurred
 | 
			
		||||
 */
 | 
			
		||||
ECDSA_SIG *ECDSA_SIG_new(void);
 | 
			
		||||
 | 
			
		||||
/** ECDSA_SIG_free
 | 
			
		||||
 * frees a ECDSA_SIG structure
 | 
			
		||||
 * \param a pointer to the ECDSA_SIG structure
 | 
			
		||||
 */
 | 
			
		||||
void	  ECDSA_SIG_free(ECDSA_SIG *a);
 | 
			
		||||
 | 
			
		||||
/** i2d_ECDSA_SIG
 | 
			
		||||
 * DER encode content of ECDSA_SIG object (note: this function modifies *pp
 | 
			
		||||
 * (*pp += length of the DER encoded signature)).
 | 
			
		||||
 * \param a  pointer to the ECDSA_SIG object
 | 
			
		||||
 * \param pp pointer to a unsigned char pointer for the output or NULL
 | 
			
		||||
 * \return the length of the DER encoded ECDSA_SIG object or 0 
 | 
			
		||||
 */
 | 
			
		||||
int	  i2d_ECDSA_SIG(const ECDSA_SIG *a, unsigned char **pp);
 | 
			
		||||
ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **v, const unsigned char **pp, long length);
 | 
			
		||||
 | 
			
		||||
/* ECDSA_DATA functions */
 | 
			
		||||
/** d2i_ECDSA_SIG
 | 
			
		||||
 * decodes a DER encoded ECDSA signature (note: this function changes *pp
 | 
			
		||||
 * (*pp += len)). 
 | 
			
		||||
 * \param v pointer to ECDSA_SIG pointer (may be NULL)
 | 
			
		||||
 * \param pp buffer with the DER encoded signature
 | 
			
		||||
 * \param len bufferlength
 | 
			
		||||
 * \return pointer to the decoded ECDSA_SIG structure (or NULL)
 | 
			
		||||
 */
 | 
			
		||||
ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **v, const unsigned char **pp, long len);
 | 
			
		||||
 | 
			
		||||
/** ECDSA_DATA_new
 | 
			
		||||
 * creates a new ECDSA_DATA object
 | 
			
		||||
 * \return pointer to a newly allocated (and initialized) ECDSA_DATA object
 | 
			
		||||
 */
 | 
			
		||||
ECDSA_DATA *ECDSA_DATA_new(void);
 | 
			
		||||
ECDSA_DATA *ECDSA_DATA_new_method(ENGINE *);
 | 
			
		||||
void ECDSA_DATA_free(ECDSA_DATA *);
 | 
			
		||||
 | 
			
		||||
ECDSA_DATA *ecdsa_check(EC_KEY *);
 | 
			
		||||
/** ECDSA_DATA_new_method
 | 
			
		||||
 * creates a new ECDSA_DATA object using a specified ENGINE
 | 
			
		||||
 * \param eng pointer to a ENGINE structure
 | 
			
		||||
 * \return pointer to a newly allocated (and initialized) ECDSA_DATA object
 | 
			
		||||
 */
 | 
			
		||||
ECDSA_DATA *ECDSA_DATA_new_method(ENGINE *eng);
 | 
			
		||||
 | 
			
		||||
ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, EC_KEY *);
 | 
			
		||||
/** ECDSA_DATA_free
 | 
			
		||||
 * frees ECDSA_DATA structure
 | 
			
		||||
 * \param data pointer to a ECDSA_DATA structure
 | 
			
		||||
 */
 | 
			
		||||
void ECDSA_DATA_free(ECDSA_DATA *data);
 | 
			
		||||
 | 
			
		||||
/** ecdsa_check
 | 
			
		||||
 * checks whether ECKEY->meth_data is a pointer to a ECDSA_DATA structure
 | 
			
		||||
 * and if not it removes the old meth_data and creates a ECDSA_DATA structure.
 | 
			
		||||
 * \param  eckey pointer to a EC_KEY object
 | 
			
		||||
 * \return pointer to a ECDSA_DATA structure
 | 
			
		||||
 */
 | 
			
		||||
ECDSA_DATA *ecdsa_check(EC_KEY *eckey);
 | 
			
		||||
 | 
			
		||||
/** ECDSA_do_sign
 | 
			
		||||
 * computes the ECDSA signature of the given hash value using
 | 
			
		||||
 * the supplied private key and returns the created signature.
 | 
			
		||||
 * \param dgst pointer to the hash value
 | 
			
		||||
 * \param dgst_len length of the hash value
 | 
			
		||||
 * \param eckey pointer to the EC_KEY object containing a private EC key
 | 
			
		||||
 * \return pointer to a ECDSA_SIG structure or NULL
 | 
			
		||||
 */
 | 
			
		||||
ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst,int dgst_len,EC_KEY *eckey);
 | 
			
		||||
 | 
			
		||||
/** ECDSA_do_verify
 | 
			
		||||
 * verifies that the supplied signature is a valid ECDSA
 | 
			
		||||
 * signature of the supplied hash value using the supplied public key.
 | 
			
		||||
 * \param dgst pointer to the hash value
 | 
			
		||||
 * \param dgst_len length of the hash value
 | 
			
		||||
 * \param sig  pointer to the ECDSA_SIG structure
 | 
			
		||||
 * \param eckey pointer to the EC_KEY object containing a public EC key
 | 
			
		||||
 * \return 1 if the signature is valid, 0 if the signature is invalid and -1 on error
 | 
			
		||||
 */
 | 
			
		||||
int	  ECDSA_do_verify(const unsigned char *dgst, int dgst_len, ECDSA_SIG 
 | 
			
		||||
		*sig, EC_KEY* eckey);
 | 
			
		||||
 | 
			
		||||
const ECDSA_METHOD *ECDSA_OpenSSL(void);
 | 
			
		||||
 | 
			
		||||
void	  ECDSA_set_default_method(const ECDSA_METHOD *);
 | 
			
		||||
const ECDSA_METHOD *ECDSA_get_default_method(void);
 | 
			
		||||
int 	  ECDSA_set_method(EC_KEY *, const ECDSA_METHOD *);
 | 
			
		||||
/** ECDSA_set_default_method
 | 
			
		||||
 * sets the default ECDSA method
 | 
			
		||||
 * \param meth the new default ECDSA_METHOD
 | 
			
		||||
 */
 | 
			
		||||
void	  ECDSA_set_default_method(const ECDSA_METHOD *meth);
 | 
			
		||||
 | 
			
		||||
int	  ECDSA_size(const EC_KEY *);
 | 
			
		||||
/** ECDSA_get_default_method
 | 
			
		||||
 * returns the default ECDSA method
 | 
			
		||||
 * \return pointer to ECDSA_METHOD structure containing the default method
 | 
			
		||||
 */
 | 
			
		||||
const ECDSA_METHOD *ECDSA_get_default_method(void);
 | 
			
		||||
 | 
			
		||||
/** ECDSA_set_method
 | 
			
		||||
 * sets method to be used for the ECDSA operations
 | 
			
		||||
 * \param eckey pointer to the EC_KEY object
 | 
			
		||||
 * \param meth  pointer to the new method
 | 
			
		||||
 * \return 1 on success and 0 otherwise 
 | 
			
		||||
 */
 | 
			
		||||
int 	  ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth);
 | 
			
		||||
 | 
			
		||||
/** ECDSA_size
 | 
			
		||||
 * returns the maximum length of the DER encoded signature
 | 
			
		||||
 * \param  eckey pointer to a EC_KEY object
 | 
			
		||||
 * \return numbers of bytes required for the DER encoded signature
 | 
			
		||||
 */
 | 
			
		||||
int	  ECDSA_size(const EC_KEY *eckey);
 | 
			
		||||
 | 
			
		||||
/** ECDSA_sign_setup
 | 
			
		||||
 * precompute parts of the signing operation (the computed values may be
 | 
			
		||||
 * passed to ECDSA_DATA->kinv and ECDSA_DATA->r for a later signature
 | 
			
		||||
 * computation).
 | 
			
		||||
 * \param eckey pointer to the EC_KEY object containing a private EC key
 | 
			
		||||
 * \param ctx  pointer to a BN_CTX object (may be NULL)
 | 
			
		||||
 * \param kinv pointer to a BIGNUM pointer for the inverse of k
 | 
			
		||||
 * \param rp   pointer to a BIGNUM pointer for x coordinate of k * generator
 | 
			
		||||
 * \return 1 on success and 0 otherwise
 | 
			
		||||
 */
 | 
			
		||||
int 	  ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, 
 | 
			
		||||
		BIGNUM **rp);
 | 
			
		||||
int	  ECDSA_sign(int type, const unsigned char *dgst, int dgst_len, 
 | 
			
		||||
 | 
			
		||||
/** ECDSA_sign
 | 
			
		||||
 * computes ECDSA signature of a given hash value using the supplied
 | 
			
		||||
 * private key (note: sig must point to ECDSA_size(eckey) bytes of memory).
 | 
			
		||||
 * \param type this parameter is ignored
 | 
			
		||||
 * \param dgst pointer to the hash value to sign
 | 
			
		||||
 * \param dgstlen length of the hash value
 | 
			
		||||
 * \param sig buffer to hold the DER encoded signature
 | 
			
		||||
 * \param siglen pointer to the length of the returned signature
 | 
			
		||||
 * \param eckey pointer to the EC_KEY object containing a private EC key
 | 
			
		||||
 * \return 1 on success and 0 otherwise
 | 
			
		||||
 */
 | 
			
		||||
int	  ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, 
 | 
			
		||||
		unsigned char *sig, unsigned int *siglen, EC_KEY *eckey);
 | 
			
		||||
int 	  ECDSA_verify(int type, const unsigned char *dgst, int dgst_len, 
 | 
			
		||||
		const unsigned char *sig, int sig_len, EC_KEY *eckey);
 | 
			
		||||
 | 
			
		||||
/** ECDSA_verify
 | 
			
		||||
 * verifies that the given signature is valid ECDSA signature
 | 
			
		||||
 * of the supplied hash value using the specified public key.
 | 
			
		||||
 * \param type this parameter is ignored
 | 
			
		||||
 * \param dgst pointer to the hash value 
 | 
			
		||||
 * \param dgstlen length of the hash value
 | 
			
		||||
 * \param sig  pointer to the DER encoded signature
 | 
			
		||||
 * \param siglen length of the DER encoded signature
 | 
			
		||||
 * \param eckey pointer to the EC_KEY object containing a public EC key
 | 
			
		||||
 * \return 1 if the signature is valid, 0 if the signature is invalid and -1 on error
 | 
			
		||||
 */
 | 
			
		||||
int 	  ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, 
 | 
			
		||||
		const unsigned char *sig, int siglen, EC_KEY *eckey);
 | 
			
		||||
 | 
			
		||||
/* the standard ex_data functions */
 | 
			
		||||
int 	  ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new 
 | 
			
		||||
		*new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
 | 
			
		||||
int 	  ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,9 @@
 | 
			
		||||
/* crypto/ecdsa/ecs_ossl.c */
 | 
			
		||||
/*
 | 
			
		||||
 * Written by Nils Larsch for the OpenSSL project
 | 
			
		||||
 */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1998-2002 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1998-2004 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
@@ -86,49 +89,43 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
 | 
			
		||||
		BIGNUM **rp)
 | 
			
		||||
{
 | 
			
		||||
	BN_CTX   *ctx = NULL;
 | 
			
		||||
	BIGNUM	 k,*kinv=NULL,*r=NULL,*order=NULL,*X=NULL;
 | 
			
		||||
	BIGNUM	 *k = NULL, *r = NULL, *order = NULL, *X = NULL;
 | 
			
		||||
	EC_POINT *tmp_point=NULL;
 | 
			
		||||
	EC_GROUP *group;
 | 
			
		||||
	int 	 ret = 0;
 | 
			
		||||
	if (!eckey  || !eckey->group || !eckey->pub_key || !eckey->priv_key)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_PASSED_NULL_PARAMETER);
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	BN_init(&k);
 | 
			
		||||
	group = eckey->group;
 | 
			
		||||
 | 
			
		||||
	if (ctx_in == NULL) 
 | 
			
		||||
	{
 | 
			
		||||
		if ((ctx=BN_CTX_new()) == NULL)
 | 
			
		||||
		if ((ctx = BN_CTX_new()) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		goto err;
 | 
			
		||||
			ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP,ERR_R_MALLOC_FAILURE);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	else
 | 
			
		||||
		ctx=ctx_in;
 | 
			
		||||
		ctx = ctx_in;
 | 
			
		||||
 | 
			
		||||
	if ((r = BN_new()) == NULL)
 | 
			
		||||
	k     = BN_new();	/* this value is later returned in *kinvp */
 | 
			
		||||
	r     = BN_new();	/* this value is later returned in *rp    */
 | 
			
		||||
	order = BN_new();
 | 
			
		||||
	X     = BN_new();
 | 
			
		||||
	if (!k || !r || !order || !X)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_BN_LIB);
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	if ((order = BN_new()) == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_BN_LIB);
 | 
			
		||||
		goto err;	
 | 
			
		||||
	}
 | 
			
		||||
	if ((X = BN_new()) == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_BN_LIB);
 | 
			
		||||
		goto err;	
 | 
			
		||||
	}
 | 
			
		||||
	if ((tmp_point = EC_POINT_new(eckey->group)) == NULL)
 | 
			
		||||
	if ((tmp_point = EC_POINT_new(group)) == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_EC_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	if (!EC_GROUP_get_order(eckey->group,order,ctx))
 | 
			
		||||
	if (!EC_GROUP_get_order(group, order, ctx))
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_EC_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
@@ -138,42 +135,39 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
 | 
			
		||||
	{
 | 
			
		||||
		/* get random k */	
 | 
			
		||||
		do
 | 
			
		||||
			if (!BN_rand_range(&k,order))
 | 
			
		||||
			if (!BN_rand_range(k, order))
 | 
			
		||||
			{
 | 
			
		||||
				ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP,
 | 
			
		||||
				 ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED);	
 | 
			
		||||
				goto err;
 | 
			
		||||
			}
 | 
			
		||||
		while (BN_is_zero(&k));
 | 
			
		||||
		while (BN_is_zero(k));
 | 
			
		||||
 | 
			
		||||
		/* compute r the x-coordinate of generator * k */
 | 
			
		||||
		if (!EC_POINT_mul(eckey->group, tmp_point, &k, NULL, NULL, ctx))
 | 
			
		||||
		if (!EC_POINT_mul(group, tmp_point, k, NULL, NULL, ctx))
 | 
			
		||||
		{
 | 
			
		||||
			ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_EC_LIB);
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
		if (EC_METHOD_get_field_type(EC_GROUP_method_of(eckey->group))
 | 
			
		||||
			== NID_X9_62_prime_field)
 | 
			
		||||
		if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field)
 | 
			
		||||
		{
 | 
			
		||||
			if (!EC_POINT_get_affine_coordinates_GFp(eckey->group,
 | 
			
		||||
			if (!EC_POINT_get_affine_coordinates_GFp(group,
 | 
			
		||||
				tmp_point, X, NULL, ctx))
 | 
			
		||||
			{
 | 
			
		||||
				ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP,
 | 
			
		||||
					ERR_R_EC_LIB);
 | 
			
		||||
				ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP,ERR_R_EC_LIB);
 | 
			
		||||
				goto err;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		else /* NID_X9_62_characteristic_two_field */
 | 
			
		||||
		{
 | 
			
		||||
			if (!EC_POINT_get_affine_coordinates_GF2m(eckey->group,
 | 
			
		||||
			if (!EC_POINT_get_affine_coordinates_GF2m(group,
 | 
			
		||||
				tmp_point, X, NULL, ctx))
 | 
			
		||||
			{
 | 
			
		||||
				ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP,
 | 
			
		||||
					ERR_R_EC_LIB);
 | 
			
		||||
				ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP,ERR_R_EC_LIB);
 | 
			
		||||
				goto err;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if (!BN_nnmod(r,X,order,ctx))
 | 
			
		||||
		if (!BN_nnmod(r, X, order, ctx))
 | 
			
		||||
		{
 | 
			
		||||
			ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_BN_LIB);
 | 
			
		||||
			goto err;
 | 
			
		||||
@@ -182,36 +176,34 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
 | 
			
		||||
	while (BN_is_zero(r));
 | 
			
		||||
 | 
			
		||||
	/* compute the inverse of k */
 | 
			
		||||
	if ((kinv = BN_mod_inverse(NULL,&k,order,ctx)) == NULL)
 | 
			
		||||
	if (!BN_mod_inverse(k, k, order, ctx))
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_BN_LIB);
 | 
			
		||||
		goto err;	
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (*rp == NULL)
 | 
			
		||||
	/* clear old values if necessary */
 | 
			
		||||
	if (*rp != NULL)
 | 
			
		||||
		BN_clear_free(*rp);
 | 
			
		||||
	*rp = r;
 | 
			
		||||
	if (*kinvp == NULL) 
 | 
			
		||||
	if (*kinvp != NULL) 
 | 
			
		||||
		BN_clear_free(*kinvp);
 | 
			
		||||
	*kinvp = kinv;
 | 
			
		||||
	kinv = NULL;
 | 
			
		||||
	/* save the pre-computed values  */
 | 
			
		||||
	*rp    = r;
 | 
			
		||||
	*kinvp = k;
 | 
			
		||||
	ret = 1;
 | 
			
		||||
err:
 | 
			
		||||
	if (!ret)
 | 
			
		||||
	{
 | 
			
		||||
		if (kinv != NULL) BN_clear_free(kinv);
 | 
			
		||||
		if (k != NULL) BN_clear_free(k);
 | 
			
		||||
		if (r != NULL) BN_clear_free(r);
 | 
			
		||||
	}
 | 
			
		||||
	if (ctx_in == NULL) 
 | 
			
		||||
		BN_CTX_free(ctx);
 | 
			
		||||
	if (kinv != NULL)
 | 
			
		||||
		BN_clear_free(kinv);
 | 
			
		||||
	if (order != NULL)
 | 
			
		||||
		BN_clear_free(order);
 | 
			
		||||
		BN_free(order);
 | 
			
		||||
	if (tmp_point != NULL) 
 | 
			
		||||
		EC_POINT_free(tmp_point);
 | 
			
		||||
	if (X)	BN_clear_free(X);
 | 
			
		||||
	BN_clear_free(&k);
 | 
			
		||||
	if (X)
 | 
			
		||||
		BN_clear_free(X);
 | 
			
		||||
	return(ret);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -219,32 +211,38 @@ err:
 | 
			
		||||
static ECDSA_SIG *ecdsa_do_sign(const unsigned char *dgst, int dgst_len, 
 | 
			
		||||
		EC_KEY *eckey)
 | 
			
		||||
{
 | 
			
		||||
	BIGNUM *kinv=NULL,*r=NULL,*s=NULL,*m=NULL,*tmp=NULL,*order=NULL;
 | 
			
		||||
	BIGNUM xr;
 | 
			
		||||
	BN_CTX *ctx=NULL;
 | 
			
		||||
	ECDSA_SIG *ret=NULL;
 | 
			
		||||
	int     ok = 0;
 | 
			
		||||
	BIGNUM *kinv=NULL, *r, *s, *m=NULL,*tmp=NULL,*order=NULL;
 | 
			
		||||
	BN_CTX     *ctx = NULL;
 | 
			
		||||
	EC_GROUP   *group;
 | 
			
		||||
	ECDSA_SIG  *ret;
 | 
			
		||||
	ECDSA_DATA *ecdsa;
 | 
			
		||||
 | 
			
		||||
	BN_init(&xr);
 | 
			
		||||
 | 
			
		||||
	ecdsa = ecdsa_check(eckey);
 | 
			
		||||
 | 
			
		||||
	if (!eckey || !eckey->group || !eckey->pub_key || !eckey->priv_key 
 | 
			
		||||
		|| !ecdsa)
 | 
			
		||||
	if (!eckey->group || !eckey->pub_key || !eckey->priv_key || !ecdsa)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_PASSED_NULL_PARAMETER);
 | 
			
		||||
		goto err;
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	group = eckey->group;
 | 
			
		||||
	ret = ECDSA_SIG_new();
 | 
			
		||||
	if (!ret)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	s = ret->s;
 | 
			
		||||
 | 
			
		||||
	if ((ctx = BN_CTX_new()) == NULL || (order = BN_new()) == NULL ||
 | 
			
		||||
		(tmp = BN_new()) == NULL || (m = BN_new()) == NULL ||
 | 
			
		||||
		(s = BN_new()) == NULL )
 | 
			
		||||
		(tmp = BN_new()) == NULL || (m = BN_new()) == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!EC_GROUP_get_order(eckey->group,order,ctx))
 | 
			
		||||
	if (!EC_GROUP_get_order(group, order, ctx))
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_EC_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
@@ -256,7 +254,7 @@ static ECDSA_SIG *ecdsa_do_sign(const unsigned char *dgst, int dgst_len,
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (BN_bin2bn(dgst,dgst_len,m) == NULL)
 | 
			
		||||
	if (!BN_bin2bn(dgst, dgst_len, m))
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
@@ -265,34 +263,34 @@ static ECDSA_SIG *ecdsa_do_sign(const unsigned char *dgst, int dgst_len,
 | 
			
		||||
	{
 | 
			
		||||
		if (ecdsa->kinv == NULL || ecdsa->r == NULL)
 | 
			
		||||
		{
 | 
			
		||||
			if (!ECDSA_sign_setup(eckey,ctx,&kinv,&r))
 | 
			
		||||
			if (!ECDSA_sign_setup(eckey, ctx, &kinv, &ret->r))
 | 
			
		||||
			{
 | 
			
		||||
				ECDSAerr(ECDSA_F_ECDSA_DO_SIGN,
 | 
			
		||||
					ERR_R_ECDSA_LIB);
 | 
			
		||||
				ECDSAerr(ECDSA_F_ECDSA_DO_SIGN,ERR_R_ECDSA_LIB);
 | 
			
		||||
				goto err;
 | 
			
		||||
			}
 | 
			
		||||
			r = ret->r;
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			kinv = ecdsa->kinv;
 | 
			
		||||
			BN_free(ret->r);
 | 
			
		||||
			kinv   = ecdsa->kinv;
 | 
			
		||||
			r      = ecdsa->r;
 | 
			
		||||
			ret->r = r;
 | 
			
		||||
			ecdsa->kinv = NULL;
 | 
			
		||||
			r = ecdsa->r;
 | 
			
		||||
			ecdsa->r = NULL;
 | 
			
		||||
			ecdsa->r    = NULL;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (!BN_mod_mul(tmp,eckey->priv_key,r,order,ctx))
 | 
			
		||||
		if (!BN_mod_mul(tmp, eckey->priv_key, r, order, ctx))
 | 
			
		||||
		{
 | 
			
		||||
			ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB);
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
		if (!BN_add(s,tmp,m))
 | 
			
		||||
		if (!BN_mod_add_quick(s, tmp, m, order))
 | 
			
		||||
		{
 | 
			
		||||
			ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB);
 | 
			
		||||
			goto err;
 | 
			
		||||
		}
 | 
			
		||||
		if (BN_cmp(s,order) > 0)
 | 
			
		||||
			BN_sub(s,s,order);
 | 
			
		||||
		if (!BN_mod_mul(s,s,kinv,order,ctx))
 | 
			
		||||
		if (!BN_mod_mul(s, s, kinv, order, ctx))
 | 
			
		||||
		{
 | 
			
		||||
			ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB);
 | 
			
		||||
			goto err;
 | 
			
		||||
@@ -300,23 +298,13 @@ static ECDSA_SIG *ecdsa_do_sign(const unsigned char *dgst, int dgst_len,
 | 
			
		||||
	}
 | 
			
		||||
	while (BN_is_zero(s));
 | 
			
		||||
 | 
			
		||||
	if ((ret = ECDSA_SIG_new()) == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	if (BN_copy(ret->r, r) == NULL || BN_copy(ret->s, s) == NULL)
 | 
			
		||||
	ok = 1;
 | 
			
		||||
err:
 | 
			
		||||
	if (!ok)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSA_SIG_free(ret);
 | 
			
		||||
		ret = NULL;
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_SIGN, ERR_R_BN_LIB);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
err:
 | 
			
		||||
	if (r)
 | 
			
		||||
		BN_clear_free(r);
 | 
			
		||||
	if (s)
 | 
			
		||||
		BN_clear_free(s);
 | 
			
		||||
	if (ctx)
 | 
			
		||||
		BN_CTX_free(ctx);
 | 
			
		||||
	if (m)
 | 
			
		||||
@@ -324,92 +312,99 @@ err:
 | 
			
		||||
	if (tmp)
 | 
			
		||||
		BN_clear_free(tmp);
 | 
			
		||||
	if (order)
 | 
			
		||||
		BN_clear_free(order);
 | 
			
		||||
		BN_free(order);
 | 
			
		||||
	if (kinv)
 | 
			
		||||
		BN_clear_free(kinv);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int ecdsa_do_verify(const unsigned char *dgst, int dgst_len,
 | 
			
		||||
		ECDSA_SIG *sig, EC_KEY *eckey)
 | 
			
		||||
{
 | 
			
		||||
	BN_CTX *ctx;
 | 
			
		||||
	BIGNUM *order=NULL,*u1=NULL,*u2=NULL,*m=NULL,*X=NULL;
 | 
			
		||||
	EC_POINT *point=NULL;
 | 
			
		||||
	int ret = -1;
 | 
			
		||||
	BN_CTX   *ctx;
 | 
			
		||||
	BIGNUM   *order, *u1, *u2, *m, *X;
 | 
			
		||||
	EC_POINT *point = NULL;
 | 
			
		||||
	EC_GROUP *group;
 | 
			
		||||
	/* check input values */
 | 
			
		||||
	if (!eckey || !eckey->group || !eckey->pub_key || !sig)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ECDSA_R_MISSING_PARAMETERS);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((ctx = BN_CTX_new()) == NULL || (order = BN_new()) == NULL ||
 | 
			
		||||
		(u1 = BN_new()) == NULL || (u2 = BN_new()) == NULL ||
 | 
			
		||||
		(m  = BN_new()) == NULL || (X  = BN_new()) == NULL)
 | 
			
		||||
	group = eckey->group;
 | 
			
		||||
 | 
			
		||||
	ctx = BN_CTX_new();
 | 
			
		||||
	if (!ctx)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		goto err;
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
	if (!EC_GROUP_get_order(eckey->group, order, ctx))
 | 
			
		||||
	BN_CTX_start(ctx);
 | 
			
		||||
	order = BN_CTX_get(ctx);	
 | 
			
		||||
	u1    = BN_CTX_get(ctx);
 | 
			
		||||
	u2    = BN_CTX_get(ctx);
 | 
			
		||||
	m     = BN_CTX_get(ctx);
 | 
			
		||||
	X     = BN_CTX_get(ctx);
 | 
			
		||||
	if (!X)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_BN_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (BN_is_zero(sig->r) || BN_get_sign(sig->r) ||
 | 
			
		||||
	    BN_ucmp(sig->r, order) >= 0)
 | 
			
		||||
	if (!EC_GROUP_get_order(group, order, ctx))
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ECDSA_R_BAD_SIGNATURE);
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	if (BN_is_zero(sig->s) || BN_get_sign(sig->s) ||
 | 
			
		||||
	    BN_ucmp(sig->s, order) >= 0)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ECDSA_R_BAD_SIGNATURE);
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_EC_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (BN_is_zero(sig->r)          || BN_get_sign(sig->r) || 
 | 
			
		||||
	    BN_ucmp(sig->r, order) >= 0 || BN_is_zero(sig->s)  ||
 | 
			
		||||
	    BN_get_sign(sig->s)         || BN_ucmp(sig->s, order) >= 0)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ECDSA_R_BAD_SIGNATURE);
 | 
			
		||||
		ret = 0;	/* signature is invalid */
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	/* calculate tmp1 = inv(S) mod order */
 | 
			
		||||
	if ((BN_mod_inverse(u2,sig->s,order,ctx)) == NULL)
 | 
			
		||||
	if (!BN_mod_inverse(u2, sig->s, order, ctx))
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_BN_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	/* digest -> m */
 | 
			
		||||
	if (BN_bin2bn(dgst,dgst_len,m) == NULL)
 | 
			
		||||
	if (!BN_bin2bn(dgst, dgst_len, m))
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_BN_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	/* u1 = m * tmp mod order */
 | 
			
		||||
	if (!BN_mod_mul(u1,m,u2,order,ctx))
 | 
			
		||||
	if (!BN_mod_mul(u1, m, u2, order, ctx))
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_BN_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	/* u2 = r * w mod q */
 | 
			
		||||
	if (!BN_mod_mul(u2,sig->r,u2,order,ctx))
 | 
			
		||||
	if (!BN_mod_mul(u2, sig->r, u2, order, ctx))
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_BN_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if ((point = EC_POINT_new(eckey->group)) == NULL)
 | 
			
		||||
	if ((point = EC_POINT_new(group)) == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_MALLOC_FAILURE);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	if (!EC_POINT_mul(eckey->group, point, u1, eckey->pub_key, u2, ctx))
 | 
			
		||||
	if (!EC_POINT_mul(group, point, u1, eckey->pub_key, u2, ctx))
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_EC_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
	if (EC_METHOD_get_field_type(EC_GROUP_method_of(eckey->group))
 | 
			
		||||
		== NID_X9_62_prime_field) 
 | 
			
		||||
	if (EC_METHOD_get_field_type(EC_GROUP_method_of(group)) == NID_X9_62_prime_field)
 | 
			
		||||
	{
 | 
			
		||||
		if (!EC_POINT_get_affine_coordinates_GFp(eckey->group,
 | 
			
		||||
		if (!EC_POINT_get_affine_coordinates_GFp(group,
 | 
			
		||||
			point, X, NULL, ctx))
 | 
			
		||||
		{
 | 
			
		||||
			ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_EC_LIB);
 | 
			
		||||
@@ -418,7 +413,7 @@ static int ecdsa_do_verify(const unsigned char *dgst, int dgst_len,
 | 
			
		||||
	}
 | 
			
		||||
	else /* NID_X9_62_characteristic_two_field */
 | 
			
		||||
	{
 | 
			
		||||
		if (!EC_POINT_get_affine_coordinates_GF2m(eckey->group,
 | 
			
		||||
		if (!EC_POINT_get_affine_coordinates_GF2m(group,
 | 
			
		||||
			point, X, NULL, ctx))
 | 
			
		||||
		{
 | 
			
		||||
			ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_EC_LIB);
 | 
			
		||||
@@ -426,30 +421,17 @@ static int ecdsa_do_verify(const unsigned char *dgst, int dgst_len,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if (!BN_nnmod(u1,X,order,ctx))
 | 
			
		||||
	if (!BN_nnmod(u1, X, order, ctx))
 | 
			
		||||
	{
 | 
			
		||||
		ECDSAerr(ECDSA_F_ECDSA_DO_VERIFY, ERR_R_BN_LIB);
 | 
			
		||||
		goto err;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*  is now in u1.  If the signature is correct, it will be
 | 
			
		||||
	 * equal to R. */
 | 
			
		||||
	ret = (BN_ucmp(u1,sig->r) == 0);
 | 
			
		||||
 | 
			
		||||
	err:
 | 
			
		||||
	if (ctx)
 | 
			
		||||
		BN_CTX_free(ctx);
 | 
			
		||||
	if (u1)
 | 
			
		||||
		BN_clear_free(u1);
 | 
			
		||||
	if (u2)
 | 
			
		||||
		BN_clear_free(u2);
 | 
			
		||||
	if (m)
 | 
			
		||||
		BN_clear_free(m);
 | 
			
		||||
	if (X)
 | 
			
		||||
		BN_clear_free(X);
 | 
			
		||||
	if (order)
 | 
			
		||||
		BN_clear_free(order);
 | 
			
		||||
	/*  if the signature is correct u1 is equal to sig->r */
 | 
			
		||||
	ret = (BN_ucmp(u1, sig->r) == 0);
 | 
			
		||||
err:
 | 
			
		||||
	BN_CTX_end(ctx);
 | 
			
		||||
	BN_CTX_free(ctx);
 | 
			
		||||
	if (point)
 | 
			
		||||
		EC_POINT_free(point);
 | 
			
		||||
	return(ret);
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -594,11 +594,11 @@ static void build_SYS_str_reasons()
 | 
			
		||||
 | 
			
		||||
#define err_clear(p,i) \
 | 
			
		||||
	do { \
 | 
			
		||||
	es->err_flags[i]=0; \
 | 
			
		||||
	es->err_buffer[i]=0; \
 | 
			
		||||
	(p)->err_flags[i]=0; \
 | 
			
		||||
	(p)->err_buffer[i]=0; \
 | 
			
		||||
	err_clear_data(p,i); \
 | 
			
		||||
	es->err_file[i]=NULL; \
 | 
			
		||||
	es->err_line[i]= -1; \
 | 
			
		||||
	(p)->err_file[i]=NULL; \
 | 
			
		||||
	(p)->err_line[i]= -1; \
 | 
			
		||||
	} while(0)
 | 
			
		||||
 | 
			
		||||
static void ERR_STATE_free(ERR_STATE *s)
 | 
			
		||||
 
 | 
			
		||||
@@ -405,8 +405,8 @@ EVP_CIPHER_ctx *c;
 | 
			
		||||
	}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
void BIO_set_cipher(BIO *b, const EVP_CIPHER *c, unsigned char *k,
 | 
			
		||||
	     unsigned char *i, int e)
 | 
			
		||||
void BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k,
 | 
			
		||||
	     const unsigned char *i, int e)
 | 
			
		||||
	{
 | 
			
		||||
	BIO_ENC_CTX *ctx;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -67,6 +67,8 @@ void OpenSSL_add_all_ciphers(void)
 | 
			
		||||
 | 
			
		||||
#ifndef OPENSSL_NO_DES
 | 
			
		||||
	EVP_add_cipher(EVP_des_cfb());
 | 
			
		||||
	EVP_add_cipher(EVP_des_cfb1());
 | 
			
		||||
	EVP_add_cipher(EVP_des_cfb8());
 | 
			
		||||
	EVP_add_cipher(EVP_des_ede_cfb());
 | 
			
		||||
	EVP_add_cipher(EVP_des_ede3_cfb());
 | 
			
		||||
 | 
			
		||||
@@ -150,6 +152,8 @@ void OpenSSL_add_all_ciphers(void)
 | 
			
		||||
	EVP_add_cipher(EVP_aes_128_ecb());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_128_cbc());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_128_cfb());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_128_cfb1());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_128_cfb8());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_128_ofb());
 | 
			
		||||
#if 0
 | 
			
		||||
	EVP_add_cipher(EVP_aes_128_ctr());
 | 
			
		||||
@@ -159,6 +163,8 @@ void OpenSSL_add_all_ciphers(void)
 | 
			
		||||
	EVP_add_cipher(EVP_aes_192_ecb());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_192_cbc());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_192_cfb());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_192_cfb1());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_192_cfb8());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_192_ofb());
 | 
			
		||||
#if 0
 | 
			
		||||
	EVP_add_cipher(EVP_aes_192_ctr());
 | 
			
		||||
@@ -168,6 +174,8 @@ void OpenSSL_add_all_ciphers(void)
 | 
			
		||||
	EVP_add_cipher(EVP_aes_256_ecb());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_256_cbc());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_256_cfb());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_256_cfb1());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_256_cfb8());
 | 
			
		||||
	EVP_add_cipher(EVP_aes_256_ofb());
 | 
			
		||||
#if 0
 | 
			
		||||
	EVP_add_cipher(EVP_aes_256_ctr());
 | 
			
		||||
 
 | 
			
		||||
@@ -248,6 +248,7 @@ int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in)
 | 
			
		||||
 | 
			
		||||
int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char *tmp_buf;
 | 
			
		||||
	if ((in == NULL) || (in->digest == NULL))
 | 
			
		||||
		{
 | 
			
		||||
		EVPerr(EVP_F_EVP_MD_CTX_COPY,EVP_R_INPUT_NOT_INITIALIZED);
 | 
			
		||||
@@ -262,12 +263,19 @@ int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in)
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	if (out->digest == in->digest)
 | 
			
		||||
		{
 | 
			
		||||
		tmp_buf = out->md_data;
 | 
			
		||||
	    	EVP_MD_CTX_set_flags(out,EVP_MD_CTX_FLAG_REUSE);
 | 
			
		||||
		}
 | 
			
		||||
	else tmp_buf = NULL;
 | 
			
		||||
	EVP_MD_CTX_cleanup(out);
 | 
			
		||||
	memcpy(out,in,sizeof *out);
 | 
			
		||||
 | 
			
		||||
	if (out->digest->ctx_size)
 | 
			
		||||
		{
 | 
			
		||||
		out->md_data=OPENSSL_malloc(out->digest->ctx_size);
 | 
			
		||||
		if (tmp_buf) out->md_data = tmp_buf;
 | 
			
		||||
		else out->md_data=OPENSSL_malloc(out->digest->ctx_size);
 | 
			
		||||
		memcpy(out->md_data,in->md_data,out->digest->ctx_size);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -277,7 +285,7 @@ int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in)
 | 
			
		||||
	return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
int EVP_Digest(void *data, unsigned int count,
 | 
			
		||||
int EVP_Digest(const void *data, unsigned int count,
 | 
			
		||||
		unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl)
 | 
			
		||||
	{
 | 
			
		||||
	EVP_MD_CTX ctx;
 | 
			
		||||
@@ -308,7 +316,8 @@ int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx)
 | 
			
		||||
	if (ctx->digest && ctx->digest->cleanup
 | 
			
		||||
	    && !EVP_MD_CTX_test_flags(ctx,EVP_MD_CTX_FLAG_CLEANED))
 | 
			
		||||
		ctx->digest->cleanup(ctx);
 | 
			
		||||
	if (ctx->digest && ctx->digest->ctx_size && ctx->md_data)
 | 
			
		||||
	if (ctx->digest && ctx->digest->ctx_size && ctx->md_data
 | 
			
		||||
	    && !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE))
 | 
			
		||||
		{
 | 
			
		||||
		OPENSSL_cleanse(ctx->md_data,ctx->digest->ctx_size);
 | 
			
		||||
		OPENSSL_free(ctx->md_data);
 | 
			
		||||
 
 | 
			
		||||
@@ -86,17 +86,35 @@ IMPLEMENT_BLOCK_CIPHER(aes_256, ks, AES, EVP_AES_KEY,
 | 
			
		||||
		       EVP_CIPHER_get_asn1_iv,
 | 
			
		||||
		       NULL)
 | 
			
		||||
 | 
			
		||||
#define IMPLEMENT_AES_CFBR(ksize,cbits)	IMPLEMENT_CFBR(aes,AES,EVP_AES_KEY,ks,ksize,cbits,16)
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_AES_CFBR(128,1)
 | 
			
		||||
IMPLEMENT_AES_CFBR(192,1)
 | 
			
		||||
IMPLEMENT_AES_CFBR(256,1)
 | 
			
		||||
 | 
			
		||||
IMPLEMENT_AES_CFBR(128,8)
 | 
			
		||||
IMPLEMENT_AES_CFBR(192,8)
 | 
			
		||||
IMPLEMENT_AES_CFBR(256,8)
 | 
			
		||||
 | 
			
		||||
static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
 | 
			
		||||
		   const unsigned char *iv, int enc) {
 | 
			
		||||
		   const unsigned char *iv, int enc)
 | 
			
		||||
	{
 | 
			
		||||
	int ret;
 | 
			
		||||
 | 
			
		||||
	if ((ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_CFB_MODE
 | 
			
		||||
	    || (ctx->cipher->flags & EVP_CIPH_MODE) == EVP_CIPH_OFB_MODE
 | 
			
		||||
	    || enc) 
 | 
			
		||||
		AES_set_encrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
 | 
			
		||||
		ret=AES_set_encrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
 | 
			
		||||
	else
 | 
			
		||||
		AES_set_decrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
 | 
			
		||||
		ret=AES_set_decrypt_key(key, ctx->key_len * 8, ctx->cipher_data);
 | 
			
		||||
 | 
			
		||||
	if(ret < 0)
 | 
			
		||||
		{
 | 
			
		||||
		EVPerr(EVP_F_AES_INIT_KEY,EVP_R_AES_KEY_SETUP_FAILED);
 | 
			
		||||
		return 0;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -92,20 +92,53 @@ static int des_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int des_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
			  const unsigned char *in, unsigned int inl)
 | 
			
		||||
static int des_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
			    const unsigned char *in, unsigned int inl)
 | 
			
		||||
{
 | 
			
		||||
	DES_cfb64_encrypt(in, out, (long)inl, ctx->cipher_data,
 | 
			
		||||
			  (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt);
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Although we have a CFB-r implementation for DES, it doesn't pack the right
 | 
			
		||||
   way, so wrap it here */
 | 
			
		||||
static int des_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
			   const unsigned char *in, unsigned int inl)
 | 
			
		||||
    {
 | 
			
		||||
    unsigned int n;
 | 
			
		||||
    unsigned char c[1],d[1];
 | 
			
		||||
 | 
			
		||||
    for(n=0 ; n < inl ; ++n)
 | 
			
		||||
	{
 | 
			
		||||
	c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0;
 | 
			
		||||
	DES_cfb_encrypt(c,d,1,1,ctx->cipher_data,(DES_cblock *)ctx->iv,
 | 
			
		||||
			ctx->encrypt);
 | 
			
		||||
	out[n/8]=(out[n/8]&~(0x80 >> (n%8)))|((d[0]&0x80) >> (n%8));
 | 
			
		||||
	}
 | 
			
		||||
    return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
static int des_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
			   const unsigned char *in, unsigned int inl)
 | 
			
		||||
    {
 | 
			
		||||
    DES_cfb_encrypt(in,out,8,inl,ctx->cipher_data,(DES_cblock *)ctx->iv,
 | 
			
		||||
		    ctx->encrypt);
 | 
			
		||||
    return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64,
 | 
			
		||||
			0, des_init_key, NULL,
 | 
			
		||||
			EVP_CIPHER_set_asn1_iv,
 | 
			
		||||
			EVP_CIPHER_get_asn1_iv,
 | 
			
		||||
			NULL)
 | 
			
		||||
 | 
			
		||||
BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,1,0,des_init_key,NULL,
 | 
			
		||||
		     EVP_CIPHER_set_asn1_iv,
 | 
			
		||||
		     EVP_CIPHER_get_asn1_iv,NULL)
 | 
			
		||||
 | 
			
		||||
BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,8,0,des_init_key,NULL,
 | 
			
		||||
		     EVP_CIPHER_set_asn1_iv,
 | 
			
		||||
		     EVP_CIPHER_get_asn1_iv,NULL)
 | 
			
		||||
 | 
			
		||||
static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
 | 
			
		||||
			const unsigned char *iv, int enc)
 | 
			
		||||
 
 | 
			
		||||
@@ -85,7 +85,8 @@ static int des_ede_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
			      const unsigned char *in, unsigned int inl)
 | 
			
		||||
{
 | 
			
		||||
	BLOCK_CIPHER_ecb_loop()
 | 
			
		||||
		DES_ecb3_encrypt((DES_cblock *)(in + i), (DES_cblock *)(out + i), 
 | 
			
		||||
		DES_ecb3_encrypt((const_DES_cblock *)(in + i),
 | 
			
		||||
				 (DES_cblock *)(out + i),
 | 
			
		||||
				 &data(ctx)->ks1, &data(ctx)->ks2,
 | 
			
		||||
				 &data(ctx)->ks3,
 | 
			
		||||
				 ctx->encrypt);
 | 
			
		||||
@@ -121,7 +122,7 @@ static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int des_ede_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
			      const unsigned char *in, unsigned int inl)
 | 
			
		||||
{
 | 
			
		||||
	DES_ede3_cfb64_encrypt(in, out, (long)inl, 
 | 
			
		||||
@@ -130,13 +131,42 @@ static int des_ede_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Although we have a CFB-r implementation for 3-DES, it doesn't pack the right
 | 
			
		||||
   way, so wrap it here */
 | 
			
		||||
static int des_ede3_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
				const unsigned char *in, unsigned int inl)
 | 
			
		||||
    {
 | 
			
		||||
    unsigned int n;
 | 
			
		||||
    unsigned char c[1],d[1];
 | 
			
		||||
 | 
			
		||||
    for(n=0 ; n < inl ; ++n)
 | 
			
		||||
	{
 | 
			
		||||
	c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0;
 | 
			
		||||
	DES_ede3_cfb_encrypt(c,d,1,1,
 | 
			
		||||
			     &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3,
 | 
			
		||||
			     (DES_cblock *)ctx->iv,ctx->encrypt);
 | 
			
		||||
	out[n/8]=(out[n/8]&~(0x80 >> (n%8)))|((d[0]&0x80) >> (n%8));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
static int des_ede3_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
 | 
			
		||||
				const unsigned char *in, unsigned int inl)
 | 
			
		||||
    {
 | 
			
		||||
    DES_ede3_cfb_encrypt(in,out,8,inl,
 | 
			
		||||
			 &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3,
 | 
			
		||||
			 (DES_cblock *)ctx->iv,ctx->encrypt);
 | 
			
		||||
    return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64,
 | 
			
		||||
			0, des_ede_init_key, NULL, 
 | 
			
		||||
			EVP_CIPHER_set_asn1_iv,
 | 
			
		||||
			EVP_CIPHER_get_asn1_iv,
 | 
			
		||||
			NULL)
 | 
			
		||||
 | 
			
		||||
#define des_ede3_cfb_cipher des_ede_cfb_cipher
 | 
			
		||||
#define des_ede3_cfb64_cipher des_ede_cfb64_cipher
 | 
			
		||||
#define des_ede3_ofb_cipher des_ede_ofb_cipher
 | 
			
		||||
#define des_ede3_cbc_cipher des_ede_cbc_cipher
 | 
			
		||||
#define des_ede3_ecb_cipher des_ede_ecb_cipher
 | 
			
		||||
@@ -147,6 +177,16 @@ BLOCK_CIPHER_defs(des_ede3, DES_EDE_KEY, NID_des_ede3, 8, 24, 8, 64,
 | 
			
		||||
			EVP_CIPHER_get_asn1_iv,
 | 
			
		||||
			NULL)
 | 
			
		||||
 | 
			
		||||
BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,1,0,
 | 
			
		||||
		     des_ede3_init_key,NULL,
 | 
			
		||||
		     EVP_CIPHER_set_asn1_iv,
 | 
			
		||||
		     EVP_CIPHER_get_asn1_iv,NULL)
 | 
			
		||||
 | 
			
		||||
BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,8,0,
 | 
			
		||||
		     des_ede3_init_key,NULL,
 | 
			
		||||
		     EVP_CIPHER_set_asn1_iv,
 | 
			
		||||
		     EVP_CIPHER_get_asn1_iv,NULL)
 | 
			
		||||
 | 
			
		||||
static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
 | 
			
		||||
			    const unsigned char *iv, int enc)
 | 
			
		||||
	{
 | 
			
		||||
 
 | 
			
		||||
@@ -129,7 +129,7 @@ void EVP_EncodeInit(EVP_ENCODE_CTX *ctx)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
 | 
			
		||||
	     unsigned char *in, int inl)
 | 
			
		||||
	     const unsigned char *in, int inl)
 | 
			
		||||
	{
 | 
			
		||||
	int i,j;
 | 
			
		||||
	unsigned int total=0;
 | 
			
		||||
@@ -233,7 +233,7 @@ void EVP_DecodeInit(EVP_ENCODE_CTX *ctx)
 | 
			
		||||
 *  1 for full line
 | 
			
		||||
 */
 | 
			
		||||
int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
 | 
			
		||||
	     unsigned char *in, int inl)
 | 
			
		||||
	     const unsigned char *in, int inl)
 | 
			
		||||
	{
 | 
			
		||||
	int seof= -1,eof=0,rv= -1,ret=0,i,v,tmp,n,ln,tmp2,exp_nl;
 | 
			
		||||
	unsigned char *d;
 | 
			
		||||
 
 | 
			
		||||
@@ -288,6 +288,8 @@ struct env_md_ctx_st
 | 
			
		||||
						* once only */
 | 
			
		||||
#define EVP_MD_CTX_FLAG_CLEANED		0x0002 /* context has already been
 | 
			
		||||
						* cleaned */
 | 
			
		||||
#define EVP_MD_CTX_FLAG_REUSE		0x0004 /* Don't free up ctx->md_data
 | 
			
		||||
						* in EVP_MD_CTX_cleanup */
 | 
			
		||||
 | 
			
		||||
struct evp_cipher_st
 | 
			
		||||
	{
 | 
			
		||||
@@ -487,7 +489,7 @@ int	EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl);
 | 
			
		||||
int	EVP_DigestUpdate(EVP_MD_CTX *ctx,const void *d,
 | 
			
		||||
			 unsigned int cnt);
 | 
			
		||||
int	EVP_DigestFinal_ex(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
 | 
			
		||||
int	EVP_Digest(void *data, unsigned int count,
 | 
			
		||||
int	EVP_Digest(const void *data, unsigned int count,
 | 
			
		||||
		unsigned char *md, unsigned int *size, const EVP_MD *type, ENGINE *impl);
 | 
			
		||||
 | 
			
		||||
int     EVP_MD_CTX_copy(EVP_MD_CTX *out,const EVP_MD_CTX *in);  
 | 
			
		||||
@@ -495,7 +497,7 @@ int	EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);
 | 
			
		||||
int	EVP_DigestFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s);
 | 
			
		||||
 | 
			
		||||
int	EVP_read_pw_string(char *buf,int length,const char *prompt,int verify);
 | 
			
		||||
void	EVP_set_pw_prompt(char *prompt);
 | 
			
		||||
void	EVP_set_pw_prompt(const char *prompt);
 | 
			
		||||
char *	EVP_get_pw_prompt(void);
 | 
			
		||||
 | 
			
		||||
int	EVP_BytesToKey(const EVP_CIPHER *type,const EVP_MD *md,
 | 
			
		||||
@@ -534,26 +536,28 @@ int	EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, int *outl);
 | 
			
		||||
int	EVP_SignFinal(EVP_MD_CTX *ctx,unsigned char *md,unsigned int *s,
 | 
			
		||||
		EVP_PKEY *pkey);
 | 
			
		||||
 | 
			
		||||
int	EVP_VerifyFinal(EVP_MD_CTX *ctx,unsigned char *sigbuf,
 | 
			
		||||
int	EVP_VerifyFinal(EVP_MD_CTX *ctx,const unsigned char *sigbuf,
 | 
			
		||||
		unsigned int siglen,EVP_PKEY *pkey);
 | 
			
		||||
 | 
			
		||||
int	EVP_OpenInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type,unsigned char *ek,
 | 
			
		||||
		int ekl,unsigned char *iv,EVP_PKEY *priv);
 | 
			
		||||
int	EVP_OpenInit(EVP_CIPHER_CTX *ctx,const EVP_CIPHER *type,
 | 
			
		||||
		const unsigned char *ek, int ekl, const unsigned char *iv,
 | 
			
		||||
		EVP_PKEY *priv);
 | 
			
		||||
int	EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);
 | 
			
		||||
 | 
			
		||||
int	EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char **ek,
 | 
			
		||||
		int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk);
 | 
			
		||||
int	EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
 | 
			
		||||
		 unsigned char **ek, int *ekl, unsigned char *iv,
 | 
			
		||||
		EVP_PKEY **pubk, int npubk);
 | 
			
		||||
int	EVP_SealFinal(EVP_CIPHER_CTX *ctx,unsigned char *out,int *outl);
 | 
			
		||||
 | 
			
		||||
void	EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
 | 
			
		||||
void	EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,
 | 
			
		||||
		int *outl,unsigned char *in,int inl);
 | 
			
		||||
void	EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
 | 
			
		||||
		const unsigned char *in,int inl);
 | 
			
		||||
void	EVP_EncodeFinal(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl);
 | 
			
		||||
int	EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
 | 
			
		||||
 | 
			
		||||
void	EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
 | 
			
		||||
int	EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx,unsigned char *out,int *outl,
 | 
			
		||||
		unsigned char *in, int inl);
 | 
			
		||||
		const unsigned char *in, int inl);
 | 
			
		||||
int	EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned
 | 
			
		||||
		char *out, int *outl);
 | 
			
		||||
int	EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
 | 
			
		||||
@@ -569,8 +573,8 @@ BIO_METHOD *BIO_f_md(void);
 | 
			
		||||
BIO_METHOD *BIO_f_base64(void);
 | 
			
		||||
BIO_METHOD *BIO_f_cipher(void);
 | 
			
		||||
BIO_METHOD *BIO_f_reliable(void);
 | 
			
		||||
void BIO_set_cipher(BIO *b,const EVP_CIPHER *c,unsigned char *k,
 | 
			
		||||
	unsigned char *i, int enc);
 | 
			
		||||
void BIO_set_cipher(BIO *b,const EVP_CIPHER *c,const unsigned char *k,
 | 
			
		||||
		const unsigned char *i, int enc);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const EVP_MD *EVP_md_null(void);
 | 
			
		||||
@@ -603,9 +607,20 @@ const EVP_CIPHER *EVP_des_ede(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede3(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede_ecb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede3_ecb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_cfb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede_cfb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede3_cfb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_cfb64(void);
 | 
			
		||||
# define EVP_des_cfb EVP_des_cfb64
 | 
			
		||||
const EVP_CIPHER *EVP_des_cfb1(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_cfb8(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede_cfb64(void);
 | 
			
		||||
# define EVP_des_ede_cfb EVP_des_ede_cfb64
 | 
			
		||||
#if 0
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede_cfb1(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede_cfb8(void);
 | 
			
		||||
#endif
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede3_cfb64(void);
 | 
			
		||||
# define EVP_des_ede3_cfb EVP_des_ede3_cfb64
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede3_cfb1(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede3_cfb8(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_ofb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede_ofb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_des_ede3_ofb(void);
 | 
			
		||||
@@ -629,7 +644,8 @@ const EVP_CIPHER *EVP_rc4_40(void);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_IDEA
 | 
			
		||||
const EVP_CIPHER *EVP_idea_ecb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_idea_cfb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_idea_cfb64(void);
 | 
			
		||||
# define EVP_idea_cfb EVP_idea_cfb64
 | 
			
		||||
const EVP_CIPHER *EVP_idea_ofb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_idea_cbc(void);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -638,45 +654,58 @@ const EVP_CIPHER *EVP_rc2_ecb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_rc2_cbc(void);
 | 
			
		||||
const EVP_CIPHER *EVP_rc2_40_cbc(void);
 | 
			
		||||
const EVP_CIPHER *EVP_rc2_64_cbc(void);
 | 
			
		||||
const EVP_CIPHER *EVP_rc2_cfb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_rc2_cfb64(void);
 | 
			
		||||
# define EVP_rc2_cfb EVP_rc2_cfb64
 | 
			
		||||
const EVP_CIPHER *EVP_rc2_ofb(void);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_BF
 | 
			
		||||
const EVP_CIPHER *EVP_bf_ecb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_bf_cbc(void);
 | 
			
		||||
const EVP_CIPHER *EVP_bf_cfb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_bf_cfb64(void);
 | 
			
		||||
# define EVP_bf_cfb EVP_bf_cfb64
 | 
			
		||||
const EVP_CIPHER *EVP_bf_ofb(void);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_CAST
 | 
			
		||||
const EVP_CIPHER *EVP_cast5_ecb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_cast5_cbc(void);
 | 
			
		||||
const EVP_CIPHER *EVP_cast5_cfb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_cast5_cfb64(void);
 | 
			
		||||
# define EVP_cast5_cfb EVP_cast5_cfb64
 | 
			
		||||
const EVP_CIPHER *EVP_cast5_ofb(void);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_RC5
 | 
			
		||||
const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void);
 | 
			
		||||
const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_rc5_32_12_16_cfb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void);
 | 
			
		||||
# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64
 | 
			
		||||
const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void);
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef OPENSSL_NO_AES
 | 
			
		||||
const EVP_CIPHER *EVP_aes_128_ecb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_128_cbc(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_128_cfb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_128_cfb1(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_128_cfb8(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_128_cfb128(void);
 | 
			
		||||
# define EVP_aes_128_cfb EVP_aes_128_cfb128
 | 
			
		||||
const EVP_CIPHER *EVP_aes_128_ofb(void);
 | 
			
		||||
#if 0
 | 
			
		||||
const EVP_CIPHER *EVP_aes_128_ctr(void);
 | 
			
		||||
#endif
 | 
			
		||||
const EVP_CIPHER *EVP_aes_192_ecb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_192_cbc(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_192_cfb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_192_cfb1(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_192_cfb8(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_192_cfb128(void);
 | 
			
		||||
# define EVP_aes_192_cfb EVP_aes_192_cfb128
 | 
			
		||||
const EVP_CIPHER *EVP_aes_192_ofb(void);
 | 
			
		||||
#if 0
 | 
			
		||||
const EVP_CIPHER *EVP_aes_192_ctr(void);
 | 
			
		||||
#endif
 | 
			
		||||
const EVP_CIPHER *EVP_aes_256_ecb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_256_cbc(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_256_cfb(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_256_cfb1(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_256_cfb8(void);
 | 
			
		||||
const EVP_CIPHER *EVP_aes_256_cfb128(void);
 | 
			
		||||
# define EVP_aes_256_cfb EVP_aes_256_cfb128
 | 
			
		||||
const EVP_CIPHER *EVP_aes_256_ofb(void);
 | 
			
		||||
#if 0
 | 
			
		||||
const EVP_CIPHER *EVP_aes_256_ctr(void);
 | 
			
		||||
@@ -707,10 +736,12 @@ const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
 | 
			
		||||
const EVP_MD *EVP_get_digestbyname(const char *name);
 | 
			
		||||
void EVP_cleanup(void);
 | 
			
		||||
 | 
			
		||||
int		EVP_PKEY_decrypt(unsigned char *dec_key,unsigned char *enc_key,
 | 
			
		||||
			int enc_key_len,EVP_PKEY *private_key);
 | 
			
		||||
int		EVP_PKEY_decrypt(unsigned char *dec_key,
 | 
			
		||||
			const unsigned char *enc_key,int enc_key_len,
 | 
			
		||||
			EVP_PKEY *private_key);
 | 
			
		||||
int		EVP_PKEY_encrypt(unsigned char *enc_key,
 | 
			
		||||
			unsigned char *key,int key_len,EVP_PKEY *pub_key);
 | 
			
		||||
			const unsigned char *key,int key_len,
 | 
			
		||||
			EVP_PKEY *pub_key);
 | 
			
		||||
int		EVP_PKEY_type(int type);
 | 
			
		||||
int		EVP_PKEY_bits(EVP_PKEY *pkey);
 | 
			
		||||
int		EVP_PKEY_size(EVP_PKEY *pkey);
 | 
			
		||||
@@ -739,13 +770,13 @@ struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
 | 
			
		||||
 | 
			
		||||
EVP_PKEY *	EVP_PKEY_new(void);
 | 
			
		||||
void		EVP_PKEY_free(EVP_PKEY *pkey);
 | 
			
		||||
EVP_PKEY *	d2i_PublicKey(int type,EVP_PKEY **a, unsigned char **pp,
 | 
			
		||||
EVP_PKEY *	d2i_PublicKey(int type,EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
			long length);
 | 
			
		||||
int		i2d_PublicKey(EVP_PKEY *a, unsigned char **pp);
 | 
			
		||||
 | 
			
		||||
EVP_PKEY *	d2i_PrivateKey(int type,EVP_PKEY **a, unsigned char **pp,
 | 
			
		||||
EVP_PKEY *	d2i_PrivateKey(int type,EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
			long length);
 | 
			
		||||
EVP_PKEY *	d2i_AutoPrivateKey(EVP_PKEY **a, unsigned char **pp,
 | 
			
		||||
EVP_PKEY *	d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp,
 | 
			
		||||
			long length);
 | 
			
		||||
int		i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp);
 | 
			
		||||
 | 
			
		||||
@@ -771,7 +802,7 @@ int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
 | 
			
		||||
			 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md,
 | 
			
		||||
			 int en_de);
 | 
			
		||||
int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
 | 
			
		||||
			   unsigned char *salt, int saltlen, int iter,
 | 
			
		||||
			   const unsigned char *salt, int saltlen, int iter,
 | 
			
		||||
			   int keylen, unsigned char *out);
 | 
			
		||||
int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
 | 
			
		||||
			 ASN1_TYPE *param, const EVP_CIPHER *cipher, const EVP_MD *md,
 | 
			
		||||
@@ -794,6 +825,7 @@ void ERR_load_EVP_strings(void);
 | 
			
		||||
/* Error codes for the EVP functions. */
 | 
			
		||||
 | 
			
		||||
/* Function codes. */
 | 
			
		||||
#define EVP_F_AES_INIT_KEY				 133
 | 
			
		||||
#define EVP_F_D2I_PKEY					 100
 | 
			
		||||
#define EVP_F_ECDSA_PKEY2PKCS8				 129
 | 
			
		||||
#define EVP_F_EC_KEY_PKEY2PKCS8				 132
 | 
			
		||||
@@ -828,6 +860,7 @@ void ERR_load_EVP_strings(void);
 | 
			
		||||
#define EVP_F_RC5_CTRL					 125
 | 
			
		||||
 | 
			
		||||
/* Reason codes. */
 | 
			
		||||
#define EVP_R_AES_KEY_SETUP_FAILED			 143
 | 
			
		||||
#define EVP_R_ASN1_LIB					 140
 | 
			
		||||
#define EVP_R_BAD_BLOCK_LENGTH				 136
 | 
			
		||||
#define EVP_R_BAD_DECRYPT				 100
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/* crypto/evp/evp_err.c */
 | 
			
		||||
/* ====================================================================
 | 
			
		||||
 * Copyright (c) 1999-2002 The OpenSSL Project.  All rights reserved.
 | 
			
		||||
 * Copyright (c) 1999-2003 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
 | 
			
		||||
@@ -66,6 +66,7 @@
 | 
			
		||||
#ifndef OPENSSL_NO_ERR
 | 
			
		||||
static ERR_STRING_DATA EVP_str_functs[]=
 | 
			
		||||
	{
 | 
			
		||||
{ERR_PACK(0,EVP_F_AES_INIT_KEY,0),	"AES_INIT_KEY"},
 | 
			
		||||
{ERR_PACK(0,EVP_F_D2I_PKEY,0),	"D2I_PKEY"},
 | 
			
		||||
{ERR_PACK(0,EVP_F_ECDSA_PKEY2PKCS8,0),	"ECDSA_PKEY2PKCS8"},
 | 
			
		||||
{ERR_PACK(0,EVP_F_EC_KEY_PKEY2PKCS8,0),	"EC_KEY_PKEY2PKCS8"},
 | 
			
		||||
@@ -103,6 +104,7 @@ static ERR_STRING_DATA EVP_str_functs[]=
 | 
			
		||||
 | 
			
		||||
static ERR_STRING_DATA EVP_str_reasons[]=
 | 
			
		||||
	{
 | 
			
		||||
{EVP_R_AES_KEY_SETUP_FAILED              ,"aes key setup failed"},
 | 
			
		||||
{EVP_R_ASN1_LIB                          ,"asn1 lib"},
 | 
			
		||||
{EVP_R_BAD_BLOCK_LENGTH                  ,"bad block length"},
 | 
			
		||||
{EVP_R_BAD_DECRYPT                       ,"bad decrypt"},
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@
 | 
			
		||||
/* should be init to zeros. */
 | 
			
		||||
static char prompt_string[80];
 | 
			
		||||
 | 
			
		||||
void EVP_set_pw_prompt(char *prompt)
 | 
			
		||||
void EVP_set_pw_prompt(const char *prompt)
 | 
			
		||||
	{
 | 
			
		||||
	if (prompt == NULL)
 | 
			
		||||
		prompt_string[0]='\0';
 | 
			
		||||
 
 | 
			
		||||
@@ -135,6 +135,30 @@ int EVP_CIPHER_type(const EVP_CIPHER *ctx)
 | 
			
		||||
 | 
			
		||||
		return NID_rc4;
 | 
			
		||||
 | 
			
		||||
		case NID_aes_128_cfb128:
 | 
			
		||||
		case NID_aes_128_cfb8:
 | 
			
		||||
		case NID_aes_128_cfb1:
 | 
			
		||||
 | 
			
		||||
		return NID_aes_128_cfb128;
 | 
			
		||||
 | 
			
		||||
		case NID_aes_192_cfb128:
 | 
			
		||||
		case NID_aes_192_cfb8:
 | 
			
		||||
		case NID_aes_192_cfb1:
 | 
			
		||||
 | 
			
		||||
		return NID_aes_192_cfb128;
 | 
			
		||||
 | 
			
		||||
		case NID_aes_256_cfb128:
 | 
			
		||||
		case NID_aes_256_cfb8:
 | 
			
		||||
		case NID_aes_256_cfb1:
 | 
			
		||||
 | 
			
		||||
		return NID_aes_256_cfb128;
 | 
			
		||||
 | 
			
		||||
		case NID_des_cfb64:
 | 
			
		||||
		case NID_des_cfb8:
 | 
			
		||||
		case NID_des_cfb1:
 | 
			
		||||
 | 
			
		||||
		return NID_des_cfb64;
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
		/* Check it has an OID and it is valid */
 | 
			
		||||
		otmp = OBJ_nid2obj(nid);
 | 
			
		||||
 
 | 
			
		||||
@@ -90,7 +90,7 @@ static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const uns
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \
 | 
			
		||||
static int cname##_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
 | 
			
		||||
static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, unsigned int inl) \
 | 
			
		||||
{\
 | 
			
		||||
	cprefix##_cfb##cbits##_encrypt(in, out, (long)inl, &((kstruct *)ctx->cipher_data)->ksched, ctx->iv, &ctx->num, ctx->encrypt);\
 | 
			
		||||
	return 1;\
 | 
			
		||||
@@ -127,7 +127,7 @@ BLOCK_CIPHER_def1(cname, cbc, cbc, CBC, kstruct, nid, block_size, key_len, \
 | 
			
		||||
#define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, \
 | 
			
		||||
			     iv_len, cbits, flags, init_key, cleanup, \
 | 
			
		||||
			     set_asn1, get_asn1, ctrl) \
 | 
			
		||||
BLOCK_CIPHER_def1(cname, cfb##cbits, cfb, CFB, kstruct, nid, 1, \
 | 
			
		||||
BLOCK_CIPHER_def1(cname, cfb##cbits, cfb##cbits, CFB, kstruct, nid, 1, \
 | 
			
		||||
		  key_len, iv_len, flags, init_key, cleanup, set_asn1, \
 | 
			
		||||
		  get_asn1, ctrl)
 | 
			
		||||
 | 
			
		||||
@@ -225,3 +225,12 @@ const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; }
 | 
			
		||||
			  get_asn1, ctrl)
 | 
			
		||||
 | 
			
		||||
#define EVP_C_DATA(kstruct, ctx)	((kstruct *)(ctx)->cipher_data)
 | 
			
		||||
 | 
			
		||||
#define IMPLEMENT_CFBR(cipher,cprefix,kstruct,ksched,keysize,cbits,iv_len) \
 | 
			
		||||
	BLOCK_CIPHER_func_cfb(cipher##_##keysize,cprefix,cbits,kstruct,ksched) \
 | 
			
		||||
	BLOCK_CIPHER_def_cfb(cipher##_##keysize,kstruct, \
 | 
			
		||||
			     NID_##cipher##_##keysize, keysize/8, iv_len, cbits, \
 | 
			
		||||
			     0, cipher##_init_key, NULL, \
 | 
			
		||||
			     EVP_CIPHER_set_asn1_iv, \
 | 
			
		||||
			     EVP_CIPHER_get_asn1_iv, \
 | 
			
		||||
			     NULL)
 | 
			
		||||
 
 | 
			
		||||
@@ -93,7 +93,7 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
 | 
			
		||||
	int plen;
 | 
			
		||||
#endif
 | 
			
		||||
	X509_ALGOR *a;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *p;
 | 
			
		||||
	const unsigned char *cp;
 | 
			
		||||
	int pkeylen;
 | 
			
		||||
	int  nid;
 | 
			
		||||
@@ -385,7 +385,7 @@ PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	RAND_add(p8->pkey->value.octet_string->data,
 | 
			
		||||
		 p8->pkey->value.octet_string->length, 0);
 | 
			
		||||
		 p8->pkey->value.octet_string->length, 0.0);
 | 
			
		||||
	return p8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -110,7 +110,8 @@ int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *cctx, const char *pass, int passlen,
 | 
			
		||||
	int i;
 | 
			
		||||
	PBEPARAM *pbe;
 | 
			
		||||
	int saltlen, iter;
 | 
			
		||||
	unsigned char *salt, *pbuf;
 | 
			
		||||
	unsigned char *salt;
 | 
			
		||||
	const unsigned char *pbuf;
 | 
			
		||||
 | 
			
		||||
	/* Extract useful info from parameter */
 | 
			
		||||
	pbuf = param->value.sequence->data;
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen,
 | 
			
		||||
			   unsigned char *salt, int saltlen, int iter,
 | 
			
		||||
			   const unsigned char *salt, int saltlen, int iter,
 | 
			
		||||
			   int keylen, unsigned char *out)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char digtmp[SHA_DIGEST_LENGTH], *p, itmp[4];
 | 
			
		||||
@@ -148,7 +148,8 @@ int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
 | 
			
		||||
                         ASN1_TYPE *param, const EVP_CIPHER *c, const EVP_MD *md,
 | 
			
		||||
                         int en_de)
 | 
			
		||||
{
 | 
			
		||||
	unsigned char *pbuf, *salt, key[EVP_MAX_KEY_LENGTH];
 | 
			
		||||
	unsigned char *salt, key[EVP_MAX_KEY_LENGTH];
 | 
			
		||||
	const unsigned char *pbuf;
 | 
			
		||||
	int saltlen, iter, plen;
 | 
			
		||||
	unsigned int keylen;
 | 
			
		||||
	PBE2PARAM *pbe2 = NULL;
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@
 | 
			
		||||
#include <openssl/objects.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
 | 
			
		||||
int EVP_PKEY_decrypt(unsigned char *key, unsigned char *ek, int ekl,
 | 
			
		||||
int EVP_PKEY_decrypt(unsigned char *key, const unsigned char *ek, int ekl,
 | 
			
		||||
	     EVP_PKEY *priv)
 | 
			
		||||
	{
 | 
			
		||||
	int ret= -1;
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@
 | 
			
		||||
#include <openssl/objects.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
 | 
			
		||||
int EVP_PKEY_encrypt(unsigned char *ek, unsigned char *key, int key_len,
 | 
			
		||||
int EVP_PKEY_encrypt(unsigned char *ek, const unsigned char *key, int key_len,
 | 
			
		||||
	     EVP_PKEY *pubk)
 | 
			
		||||
	{
 | 
			
		||||
	int ret=0;
 | 
			
		||||
 
 | 
			
		||||
@@ -65,8 +65,9 @@
 | 
			
		||||
#include <openssl/objects.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
 | 
			
		||||
int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char *ek,
 | 
			
		||||
	     int ekl, unsigned char *iv, EVP_PKEY *priv)
 | 
			
		||||
int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
 | 
			
		||||
	const unsigned char *ek, int ekl, const unsigned char *iv,
 | 
			
		||||
	EVP_PKEY *priv)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char *key=NULL;
 | 
			
		||||
	int i,size=0,ret=0;
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,7 @@
 | 
			
		||||
#include <openssl/objects.h>
 | 
			
		||||
#include <openssl/x509.h>
 | 
			
		||||
 | 
			
		||||
int EVP_VerifyFinal(EVP_MD_CTX *ctx, unsigned char *sigbuf,
 | 
			
		||||
int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf,
 | 
			
		||||
	     unsigned int siglen, EVP_PKEY *pkey)
 | 
			
		||||
	{
 | 
			
		||||
	unsigned char m[EVP_MAX_MD_SIZE];
 | 
			
		||||
 
 | 
			
		||||
@@ -225,7 +225,7 @@ DECLARE_STACK_OF(KRB5_AUTHENTBODY)
 | 
			
		||||
**	void name##_free(type *a);
 | 
			
		||||
**	DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) =
 | 
			
		||||
**	 DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) =
 | 
			
		||||
**	  type *d2i_##name(type **a, unsigned char **in, long len);
 | 
			
		||||
**	  type *d2i_##name(type **a, const unsigned char **in, long len);
 | 
			
		||||
**	  int i2d_##name(type *a, unsigned char **out);
 | 
			
		||||
**	  DECLARE_ASN1_ITEM(itname) = OPENSSL_EXTERN const ASN1_ITEM itname##_it
 | 
			
		||||
*/
 | 
			
		||||
 
 | 
			
		||||
@@ -397,7 +397,9 @@ ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name)
 | 
			
		||||
	{
 | 
			
		||||
	int nid = NID_undef;
 | 
			
		||||
	ASN1_OBJECT *op=NULL;
 | 
			
		||||
	unsigned char *buf,*p;
 | 
			
		||||
	unsigned char *buf;
 | 
			
		||||
	unsigned char *p;
 | 
			
		||||
	const unsigned char *cp;
 | 
			
		||||
	int i, j;
 | 
			
		||||
 | 
			
		||||
	if(!no_name) {
 | 
			
		||||
@@ -424,8 +426,8 @@ ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name)
 | 
			
		||||
	/* Write out contents */
 | 
			
		||||
	a2d_ASN1_OBJECT(p,i,s,-1);
 | 
			
		||||
 | 
			
		||||
	p=buf;
 | 
			
		||||
	op=d2i_ASN1_OBJECT(NULL,&p,j);
 | 
			
		||||
	cp=buf;
 | 
			
		||||
	op=d2i_ASN1_OBJECT(NULL,&cp,j);
 | 
			
		||||
	OPENSSL_free(buf);
 | 
			
		||||
	return op;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -62,12 +62,12 @@
 | 
			
		||||
 * [including the GNU Public Licence.]
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define NUM_NID 726
 | 
			
		||||
#define NUM_SN 721
 | 
			
		||||
#define NUM_LN 721
 | 
			
		||||
#define NUM_OBJ 693
 | 
			
		||||
#define NUM_NID 737
 | 
			
		||||
#define NUM_SN 732
 | 
			
		||||
#define NUM_LN 732
 | 
			
		||||
#define NUM_OBJ 694
 | 
			
		||||
 | 
			
		||||
static unsigned char lvalues[4882]={
 | 
			
		||||
static unsigned char lvalues[4885]={
 | 
			
		||||
0x00,                                        /* [  0] OBJ_undef */
 | 
			
		||||
0x2A,0x86,0x48,0x86,0xF7,0x0D,               /* [  1] OBJ_rsadsi */
 | 
			
		||||
0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,          /* [  7] OBJ_pkcs */
 | 
			
		||||
@@ -761,6 +761,7 @@ static unsigned char lvalues[4882]={
 | 
			
		||||
0x00,                                        /* [4878] OBJ_itu_t */
 | 
			
		||||
0x50,                                        /* [4879] OBJ_joint_iso_itu_t */
 | 
			
		||||
0x67,                                        /* [4880] OBJ_international_organizations */
 | 
			
		||||
0x55,0x1D,0x36,                              /* [4881] OBJ_inhibit_any_policy */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static ASN1_OBJECT nid_objs[NUM_NID]={
 | 
			
		||||
@@ -1896,20 +1897,38 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
 | 
			
		||||
	NID_international_organizations,1,&(lvalues[4880]),0},
 | 
			
		||||
{"Oakley-EC2N-3","ipsec3",NID_ipsec3,0,NULL},
 | 
			
		||||
{"Oakley-EC2N-4","ipsec4",NID_ipsec4,0,NULL},
 | 
			
		||||
{"AES-128-CFB1","aes-128-cfb1",NID_aes_128_cfb1,0,NULL},
 | 
			
		||||
{"AES-192-CFB1","aes-192-cfb1",NID_aes_192_cfb1,0,NULL},
 | 
			
		||||
{"AES-256-CFB1","aes-256-cfb1",NID_aes_256_cfb1,0,NULL},
 | 
			
		||||
{"AES-128-CFB8","aes-128-cfb8",NID_aes_128_cfb8,0,NULL},
 | 
			
		||||
{"AES-192-CFB8","aes-192-cfb8",NID_aes_192_cfb8,0,NULL},
 | 
			
		||||
{"AES-256-CFB8","aes-256-cfb8",NID_aes_256_cfb8,0,NULL},
 | 
			
		||||
{"DES-CFB1","des-cfb1",NID_des_cfb1,0,NULL},
 | 
			
		||||
{"DES-CFB8","des-cfb8",NID_des_cfb8,0,NULL},
 | 
			
		||||
{"DES-EDE3-CFB1","des-ede3-cfb1",NID_des_ede3_cfb1,0,NULL},
 | 
			
		||||
{"DES-EDE3-CFB8","des-ede3-cfb8",NID_des_ede3_cfb8,0,NULL},
 | 
			
		||||
{"inhibitAnyPolicy","X509v3 Inhibit Any Policy",
 | 
			
		||||
	NID_inhibit_any_policy,3,&(lvalues[4881]),0},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static ASN1_OBJECT *sn_objs[NUM_SN]={
 | 
			
		||||
&(nid_objs[364]),/* "AD_DVCS" */
 | 
			
		||||
&(nid_objs[419]),/* "AES-128-CBC" */
 | 
			
		||||
&(nid_objs[421]),/* "AES-128-CFB" */
 | 
			
		||||
&(nid_objs[726]),/* "AES-128-CFB1" */
 | 
			
		||||
&(nid_objs[729]),/* "AES-128-CFB8" */
 | 
			
		||||
&(nid_objs[418]),/* "AES-128-ECB" */
 | 
			
		||||
&(nid_objs[420]),/* "AES-128-OFB" */
 | 
			
		||||
&(nid_objs[423]),/* "AES-192-CBC" */
 | 
			
		||||
&(nid_objs[425]),/* "AES-192-CFB" */
 | 
			
		||||
&(nid_objs[727]),/* "AES-192-CFB1" */
 | 
			
		||||
&(nid_objs[730]),/* "AES-192-CFB8" */
 | 
			
		||||
&(nid_objs[422]),/* "AES-192-ECB" */
 | 
			
		||||
&(nid_objs[424]),/* "AES-192-OFB" */
 | 
			
		||||
&(nid_objs[427]),/* "AES-256-CBC" */
 | 
			
		||||
&(nid_objs[429]),/* "AES-256-CFB" */
 | 
			
		||||
&(nid_objs[728]),/* "AES-256-CFB1" */
 | 
			
		||||
&(nid_objs[731]),/* "AES-256-CFB8" */
 | 
			
		||||
&(nid_objs[426]),/* "AES-256-ECB" */
 | 
			
		||||
&(nid_objs[428]),/* "AES-256-OFB" */
 | 
			
		||||
&(nid_objs[91]),/* "BF-CBC" */
 | 
			
		||||
@@ -1929,6 +1948,8 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
 | 
			
		||||
&(nid_objs[31]),/* "DES-CBC" */
 | 
			
		||||
&(nid_objs[707]),/* "DES-CDMF" */
 | 
			
		||||
&(nid_objs[30]),/* "DES-CFB" */
 | 
			
		||||
&(nid_objs[732]),/* "DES-CFB1" */
 | 
			
		||||
&(nid_objs[733]),/* "DES-CFB8" */
 | 
			
		||||
&(nid_objs[29]),/* "DES-ECB" */
 | 
			
		||||
&(nid_objs[32]),/* "DES-EDE" */
 | 
			
		||||
&(nid_objs[43]),/* "DES-EDE-CBC" */
 | 
			
		||||
@@ -1937,6 +1958,8 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
 | 
			
		||||
&(nid_objs[33]),/* "DES-EDE3" */
 | 
			
		||||
&(nid_objs[44]),/* "DES-EDE3-CBC" */
 | 
			
		||||
&(nid_objs[61]),/* "DES-EDE3-CFB" */
 | 
			
		||||
&(nid_objs[734]),/* "DES-EDE3-CFB1" */
 | 
			
		||||
&(nid_objs[735]),/* "DES-EDE3-CFB8" */
 | 
			
		||||
&(nid_objs[63]),/* "DES-EDE3-OFB" */
 | 
			
		||||
&(nid_objs[45]),/* "DES-OFB" */
 | 
			
		||||
&(nid_objs[80]),/* "DESX-CBC" */
 | 
			
		||||
@@ -2303,6 +2326,7 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
 | 
			
		||||
&(nid_objs[249]),/* "id-smime-spq-ets-sqt-uri" */
 | 
			
		||||
&(nid_objs[527]),/* "identified-organization" */
 | 
			
		||||
&(nid_objs[461]),/* "info" */
 | 
			
		||||
&(nid_objs[736]),/* "inhibitAnyPolicy" */
 | 
			
		||||
&(nid_objs[101]),/* "initials" */
 | 
			
		||||
&(nid_objs[723]),/* "international-organizations" */
 | 
			
		||||
&(nid_objs[142]),/* "invalidityDate" */
 | 
			
		||||
@@ -2716,6 +2740,7 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={
 | 
			
		||||
&(nid_objs[89]),/* "X509v3 Certificate Policies" */
 | 
			
		||||
&(nid_objs[140]),/* "X509v3 Delta CRL Indicator" */
 | 
			
		||||
&(nid_objs[126]),/* "X509v3 Extended Key Usage" */
 | 
			
		||||
&(nid_objs[736]),/* "X509v3 Inhibit Any Policy" */
 | 
			
		||||
&(nid_objs[86]),/* "X509v3 Issuer Alternative Name" */
 | 
			
		||||
&(nid_objs[83]),/* "X509v3 Key Usage" */
 | 
			
		||||
&(nid_objs[720]),/* "X509v3 Name Constraints" */
 | 
			
		||||
@@ -2737,14 +2762,20 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={
 | 
			
		||||
&(nid_objs[670]),/* "additional verification" */
 | 
			
		||||
&(nid_objs[419]),/* "aes-128-cbc" */
 | 
			
		||||
&(nid_objs[421]),/* "aes-128-cfb" */
 | 
			
		||||
&(nid_objs[726]),/* "aes-128-cfb1" */
 | 
			
		||||
&(nid_objs[729]),/* "aes-128-cfb8" */
 | 
			
		||||
&(nid_objs[418]),/* "aes-128-ecb" */
 | 
			
		||||
&(nid_objs[420]),/* "aes-128-ofb" */
 | 
			
		||||
&(nid_objs[423]),/* "aes-192-cbc" */
 | 
			
		||||
&(nid_objs[425]),/* "aes-192-cfb" */
 | 
			
		||||
&(nid_objs[727]),/* "aes-192-cfb1" */
 | 
			
		||||
&(nid_objs[730]),/* "aes-192-cfb8" */
 | 
			
		||||
&(nid_objs[422]),/* "aes-192-ecb" */
 | 
			
		||||
&(nid_objs[424]),/* "aes-192-ofb" */
 | 
			
		||||
&(nid_objs[427]),/* "aes-256-cbc" */
 | 
			
		||||
&(nid_objs[429]),/* "aes-256-cfb" */
 | 
			
		||||
&(nid_objs[728]),/* "aes-256-cfb1" */
 | 
			
		||||
&(nid_objs[731]),/* "aes-256-cfb8" */
 | 
			
		||||
&(nid_objs[426]),/* "aes-256-ecb" */
 | 
			
		||||
&(nid_objs[428]),/* "aes-256-ofb" */
 | 
			
		||||
&(nid_objs[376]),/* "algorithm" */
 | 
			
		||||
@@ -2803,6 +2834,8 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={
 | 
			
		||||
&(nid_objs[31]),/* "des-cbc" */
 | 
			
		||||
&(nid_objs[707]),/* "des-cdmf" */
 | 
			
		||||
&(nid_objs[30]),/* "des-cfb" */
 | 
			
		||||
&(nid_objs[732]),/* "des-cfb1" */
 | 
			
		||||
&(nid_objs[733]),/* "des-cfb8" */
 | 
			
		||||
&(nid_objs[29]),/* "des-ecb" */
 | 
			
		||||
&(nid_objs[32]),/* "des-ede" */
 | 
			
		||||
&(nid_objs[43]),/* "des-ede-cbc" */
 | 
			
		||||
@@ -2811,6 +2844,8 @@ static ASN1_OBJECT *ln_objs[NUM_LN]={
 | 
			
		||||
&(nid_objs[33]),/* "des-ede3" */
 | 
			
		||||
&(nid_objs[44]),/* "des-ede3-cbc" */
 | 
			
		||||
&(nid_objs[61]),/* "des-ede3-cfb" */
 | 
			
		||||
&(nid_objs[734]),/* "des-ede3-cfb1" */
 | 
			
		||||
&(nid_objs[735]),/* "des-ede3-cfb8" */
 | 
			
		||||
&(nid_objs[63]),/* "des-ede3-ofb" */
 | 
			
		||||
&(nid_objs[45]),/* "des-ofb" */
 | 
			
		||||
&(nid_objs[107]),/* "description" */
 | 
			
		||||
@@ -3406,6 +3441,7 @@ static ASN1_OBJECT *obj_objs[NUM_OBJ]={
 | 
			
		||||
&(nid_objs[90]),/* OBJ_authority_key_identifier     2 5 29 35 */
 | 
			
		||||
&(nid_objs[401]),/* OBJ_policy_constraints           2 5 29 36 */
 | 
			
		||||
&(nid_objs[126]),/* OBJ_ext_key_usage                2 5 29 37 */
 | 
			
		||||
&(nid_objs[736]),/* OBJ_inhibit_any_policy           2 5 29 54 */
 | 
			
		||||
&(nid_objs[402]),/* OBJ_target_information           2 5 29 55 */
 | 
			
		||||
&(nid_objs[403]),/* OBJ_no_rev_avail                 2 5 29 56 */
 | 
			
		||||
&(nid_objs[577]),/* OBJ_set_ctype                    2 23 42 0 */
 | 
			
		||||
 
 | 
			
		||||
@@ -2082,6 +2082,11 @@
 | 
			
		||||
#define NID_ext_key_usage		126
 | 
			
		||||
#define OBJ_ext_key_usage		OBJ_id_ce,37L
 | 
			
		||||
 | 
			
		||||
#define SN_inhibit_any_policy		"inhibitAnyPolicy"
 | 
			
		||||
#define LN_inhibit_any_policy		"X509v3 Inhibit Any Policy"
 | 
			
		||||
#define NID_inhibit_any_policy		736
 | 
			
		||||
#define OBJ_inhibit_any_policy		OBJ_id_ce,54L
 | 
			
		||||
 | 
			
		||||
#define SN_target_information		"targetInformation"
 | 
			
		||||
#define LN_target_information		"X509v3 AC Targeting"
 | 
			
		||||
#define NID_target_information		402
 | 
			
		||||
@@ -2319,6 +2324,46 @@
 | 
			
		||||
#define NID_aes_256_cfb128		429
 | 
			
		||||
#define OBJ_aes_256_cfb128		OBJ_aes,44L
 | 
			
		||||
 | 
			
		||||
#define SN_aes_128_cfb1		"AES-128-CFB1"
 | 
			
		||||
#define LN_aes_128_cfb1		"aes-128-cfb1"
 | 
			
		||||
#define NID_aes_128_cfb1		726
 | 
			
		||||
 | 
			
		||||
#define SN_aes_192_cfb1		"AES-192-CFB1"
 | 
			
		||||
#define LN_aes_192_cfb1		"aes-192-cfb1"
 | 
			
		||||
#define NID_aes_192_cfb1		727
 | 
			
		||||
 | 
			
		||||
#define SN_aes_256_cfb1		"AES-256-CFB1"
 | 
			
		||||
#define LN_aes_256_cfb1		"aes-256-cfb1"
 | 
			
		||||
#define NID_aes_256_cfb1		728
 | 
			
		||||
 | 
			
		||||
#define SN_aes_128_cfb8		"AES-128-CFB8"
 | 
			
		||||
#define LN_aes_128_cfb8		"aes-128-cfb8"
 | 
			
		||||
#define NID_aes_128_cfb8		729
 | 
			
		||||
 | 
			
		||||
#define SN_aes_192_cfb8		"AES-192-CFB8"
 | 
			
		||||
#define LN_aes_192_cfb8		"aes-192-cfb8"
 | 
			
		||||
#define NID_aes_192_cfb8		730
 | 
			
		||||
 | 
			
		||||
#define SN_aes_256_cfb8		"AES-256-CFB8"
 | 
			
		||||
#define LN_aes_256_cfb8		"aes-256-cfb8"
 | 
			
		||||
#define NID_aes_256_cfb8		731
 | 
			
		||||
 | 
			
		||||
#define SN_des_cfb1		"DES-CFB1"
 | 
			
		||||
#define LN_des_cfb1		"des-cfb1"
 | 
			
		||||
#define NID_des_cfb1		732
 | 
			
		||||
 | 
			
		||||
#define SN_des_cfb8		"DES-CFB8"
 | 
			
		||||
#define LN_des_cfb8		"des-cfb8"
 | 
			
		||||
#define NID_des_cfb8		733
 | 
			
		||||
 | 
			
		||||
#define SN_des_ede3_cfb1		"DES-EDE3-CFB1"
 | 
			
		||||
#define LN_des_ede3_cfb1		"des-ede3-cfb1"
 | 
			
		||||
#define NID_des_ede3_cfb1		734
 | 
			
		||||
 | 
			
		||||
#define SN_des_ede3_cfb8		"DES-EDE3-CFB8"
 | 
			
		||||
#define LN_des_ede3_cfb8		"des-ede3-cfb8"
 | 
			
		||||
#define NID_des_ede3_cfb8		735
 | 
			
		||||
 | 
			
		||||
#define SN_hold_instruction_code		"holdInstructionCode"
 | 
			
		||||
#define LN_hold_instruction_code		"Hold Instruction Code"
 | 
			
		||||
#define NID_hold_instruction_code		430
 | 
			
		||||
 
 | 
			
		||||
@@ -723,3 +723,14 @@ joint_iso_itu_t		722
 | 
			
		||||
international_organizations		723
 | 
			
		||||
ipsec3		724
 | 
			
		||||
ipsec4		725
 | 
			
		||||
aes_128_cfb1		726
 | 
			
		||||
aes_192_cfb1		727
 | 
			
		||||
aes_256_cfb1		728
 | 
			
		||||
aes_128_cfb8		729
 | 
			
		||||
aes_192_cfb8		730
 | 
			
		||||
aes_256_cfb8		731
 | 
			
		||||
des_cfb1		732
 | 
			
		||||
des_cfb8		733
 | 
			
		||||
des_ede3_cfb1		734
 | 
			
		||||
des_ede3_cfb8		735
 | 
			
		||||
inhibit_any_policy		736
 | 
			
		||||
 
 | 
			
		||||
@@ -679,6 +679,8 @@ id-ce 35		: authorityKeyIdentifier : X509v3 Authority Key Identifier
 | 
			
		||||
id-ce 36		: policyConstraints	: X509v3 Policy Constraints
 | 
			
		||||
!Cname ext-key-usage
 | 
			
		||||
id-ce 37		: extendedKeyUsage	: X509v3 Extended Key Usage
 | 
			
		||||
!Cname inhibit-any-policy
 | 
			
		||||
id-ce 54		: inhibitAnyPolicy	: X509v3 Inhibit Any Policy
 | 
			
		||||
!Cname target-information
 | 
			
		||||
id-ce 55		: targetInformation	: X509v3 AC Targeting
 | 
			
		||||
!Cname no-rev-avail
 | 
			
		||||
@@ -775,6 +777,19 @@ aes 43			: AES-256-OFB		: aes-256-ofb
 | 
			
		||||
!Cname aes-256-cfb128
 | 
			
		||||
aes 44			: AES-256-CFB		: aes-256-cfb
 | 
			
		||||
 | 
			
		||||
# There are no OIDs for these modes...
 | 
			
		||||
 | 
			
		||||
			: AES-128-CFB1		: aes-128-cfb1
 | 
			
		||||
			: AES-192-CFB1		: aes-192-cfb1
 | 
			
		||||
			: AES-256-CFB1		: aes-256-cfb1
 | 
			
		||||
			: AES-128-CFB8		: aes-128-cfb8
 | 
			
		||||
			: AES-192-CFB8		: aes-192-cfb8
 | 
			
		||||
			: AES-256-CFB8		: aes-256-cfb8
 | 
			
		||||
			: DES-CFB1		: des-cfb1
 | 
			
		||||
			: DES-CFB8		: des-cfb8
 | 
			
		||||
			: DES-EDE3-CFB1		: des-ede3-cfb1
 | 
			
		||||
			: DES-EDE3-CFB8		: des-ede3-cfb8
 | 
			
		||||
 | 
			
		||||
# Hold instruction CRL entry extension
 | 
			
		||||
!Cname hold-instruction-code
 | 
			
		||||
id-ce 23		: holdInstructionCode	: Hold Instruction Code
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user