mirror of
				https://github.com/PurpleI2P/i2pd.git
				synced 2025-11-04 00:20:46 +00:00 
			
		
		
		
	revert x86 define check, modify makefiles
This commit is contained in:
		
							parent
							
								
									eab9a07e3f
								
							
						
					
					
						commit
						600c7b5b26
					
				
					 8 changed files with 87 additions and 110 deletions
				
			
		
							
								
								
									
										2
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -76,7 +76,7 @@ deps: mk_obj_dir
 | 
			
		|||
	@sed -i -e '/\.o:/ s/^/obj\//' $(DEPS)
 | 
			
		||||
 | 
			
		||||
obj/%.o: %.cpp
 | 
			
		||||
	$(CXX) $(CXXFLAGS) $(NEEDED_CXXFLAGS) $(INCFLAGS) $(CPU_FLAGS) -c -o $@ $<
 | 
			
		||||
	$(CXX) $(CXXFLAGS) $(NEEDED_CXXFLAGS) $(INCFLAGS) -c -o $@ $<
 | 
			
		||||
 | 
			
		||||
# '-' is 'ignore if missing' on first run
 | 
			
		||||
-include $(DEPS)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,7 +35,7 @@ endif
 | 
			
		|||
# Seems like all recent Mac's have AES-NI, after firmware upgrade 2.2
 | 
			
		||||
# Found no good way to detect it from command line. TODO: Might be some osx sysinfo magic
 | 
			
		||||
ifeq ($(USE_AESNI),yes)
 | 
			
		||||
	CXXFLAGS += -maes
 | 
			
		||||
	CXXFLAGS += -D__AES__
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
install: all
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,14 +58,7 @@ endif
 | 
			
		|||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_AESNI),yes)
 | 
			
		||||
ifneq (, $(findstring aarch64, $(SYS)))
 | 
			
		||||
	CXXFLAGS += -DARM64AES
 | 
			
		||||
else
 | 
			
		||||
	ifeq (, $(findstring arm, $(SYS))) # no arm in dumpmachine
 | 
			
		||||
	# check if AES-NI is supported by CPU
 | 
			
		||||
	ifeq ($(shell $(GREP) -c aes /proc/cpuinfo),0)
 | 
			
		||||
		CPU_FLAGS += -maes
 | 
			
		||||
	endif
 | 
			
		||||
	endif
 | 
			
		||||
ifeq (, $(findstring arm, $(SYS))$(findstring aarch64, $(SYS)) # no arm and aarch64 in dumpmachine
 | 
			
		||||
	CXXFLAGS += -D__AES__
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,7 @@ ifeq ($(USE_WINXP_FLAGS), yes)
 | 
			
		|||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_AESNI),yes)
 | 
			
		||||
	CPU_FLAGS += -maes
 | 
			
		||||
	CXXFLAGS += -D__AES__
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_ASLR),yes)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,8 +22,8 @@ ifeq ($(USE_UPNP),yes)
 | 
			
		|||
	endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(USE_AESNI),1)
 | 
			
		||||
	CXXFLAGS += -maes
 | 
			
		||||
ifeq ($(USE_AESNI),yes)
 | 
			
		||||
	CXXFLAGS += -D__AES__
 | 
			
		||||
else
 | 
			
		||||
	CXXFLAGS += -msse
 | 
			
		||||
endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -119,7 +119,7 @@ namespace crypto
 | 
			
		|||
 | 
			
		||||
		~CryptoConstants ()
 | 
			
		||||
		{
 | 
			
		||||
			BN_free (elgp);  BN_free (elgg); BN_free (dsap); BN_free (dsaq); BN_free (dsag); BN_free (rsae);
 | 
			
		||||
			BN_free (elgp); BN_free (elgg); BN_free (dsap); BN_free (dsaq); BN_free (dsag); BN_free (rsae);
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -522,7 +522,7 @@ namespace crypto
 | 
			
		|||
			bn2buf (y, encrypted + len, len);
 | 
			
		||||
			RAND_bytes (encrypted + 2*len, 256 - 2*len);
 | 
			
		||||
		}
 | 
			
		||||
		// ecryption key and iv
 | 
			
		||||
		// encryption key and iv
 | 
			
		||||
		EC_POINT_mul (curve, p, nullptr, key, k, ctx);
 | 
			
		||||
		EC_POINT_get_affine_coordinates_GFp (curve, p, x, y, nullptr);
 | 
			
		||||
		uint8_t keyBuf[64], iv[64], shared[32];
 | 
			
		||||
| 
						 | 
				
			
			@ -639,8 +639,6 @@ namespace crypto
 | 
			
		|||
		uint64_t buf[256];
 | 
			
		||||
		uint64_t hash[12]; // 96 bytes
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#pragma GCC push_options
 | 
			
		||||
#pragma GCC target("avx")
 | 
			
		||||
		if(i2p::cpu::avx)
 | 
			
		||||
		{
 | 
			
		||||
			__asm__
 | 
			
		||||
| 
						 | 
				
			
			@ -659,11 +657,10 @@ namespace crypto
 | 
			
		|||
					:
 | 
			
		||||
					: [key]"m"(*(const uint8_t *)key), [ipad]"m"(*ipads), [opad]"m"(*opads),
 | 
			
		||||
						[buf]"r"(buf), [hash]"r"(hash)
 | 
			
		||||
					: "memory", "%xmm0"	// TODO: change to %ymm0 later
 | 
			
		||||
					: "memory", "%xmm0" // TODO: change to %ymm0 later
 | 
			
		||||
					);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
#pragma GCC pop_options
 | 
			
		||||
#endif
 | 
			
		||||
		{
 | 
			
		||||
			// ikeypad
 | 
			
		||||
| 
						 | 
				
			
			@ -691,46 +688,39 @@ namespace crypto
 | 
			
		|||
		// concatenate with msg
 | 
			
		||||
		memcpy (buf + 8, msg, len);
 | 
			
		||||
		// calculate first hash
 | 
			
		||||
		MD5((uint8_t *)buf, len + 64, (uint8_t *)(hash + 8));  // 16 bytes
 | 
			
		||||
		MD5((uint8_t *)buf, len + 64, (uint8_t *)(hash + 8)); // 16 bytes
 | 
			
		||||
 | 
			
		||||
		// calculate digest
 | 
			
		||||
		MD5((uint8_t *)hash, 96, digest);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
// AES
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
	#ifdef ARM64AES
 | 
			
		||||
	void init_aesenc(void){
 | 
			
		||||
			// TODO: Implementation
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
	#define KeyExpansion256(round0,round1) \
 | 
			
		||||
		"pshufd	$0xff, %%xmm2, %%xmm2 \n" \
 | 
			
		||||
		"movaps	%%xmm1, %%xmm4 \n" \
 | 
			
		||||
		"pslldq	$4, %%xmm4 \n" \
 | 
			
		||||
		"pshufd $0xff, %%xmm2, %%xmm2 \n" \
 | 
			
		||||
		"movaps %%xmm1, %%xmm4 \n" \
 | 
			
		||||
		"pslldq $4, %%xmm4 \n" \
 | 
			
		||||
		"pxor %%xmm4, %%xmm1 \n" \
 | 
			
		||||
		"pslldq	$4, %%xmm4 \n" \
 | 
			
		||||
		"pslldq $4, %%xmm4 \n" \
 | 
			
		||||
		"pxor %%xmm4, %%xmm1 \n" \
 | 
			
		||||
		"pslldq	$4, %%xmm4 \n" \
 | 
			
		||||
		"pslldq $4, %%xmm4 \n" \
 | 
			
		||||
		"pxor %%xmm4, %%xmm1 \n" \
 | 
			
		||||
		"pxor %%xmm2, %%xmm1 \n" \
 | 
			
		||||
		"movaps	%%xmm1, "#round0"(%[sched]) \n" \
 | 
			
		||||
		"movaps %%xmm1, "#round0"(%[sched]) \n" \
 | 
			
		||||
		"aeskeygenassist $0, %%xmm1, %%xmm4 \n" \
 | 
			
		||||
		"pshufd	$0xaa, %%xmm4, %%xmm2 \n" \
 | 
			
		||||
		"movaps	%%xmm3, %%xmm4 \n" \
 | 
			
		||||
		"pslldq	$4, %%xmm4 \n" \
 | 
			
		||||
		"pshufd $0xaa, %%xmm4, %%xmm2 \n" \
 | 
			
		||||
		"movaps %%xmm3, %%xmm4 \n" \
 | 
			
		||||
		"pslldq $4, %%xmm4 \n" \
 | 
			
		||||
		"pxor %%xmm4, %%xmm3 \n" \
 | 
			
		||||
		"pslldq	$4, %%xmm4 \n" \
 | 
			
		||||
		"pslldq $4, %%xmm4 \n" \
 | 
			
		||||
		"pxor %%xmm4, %%xmm3 \n" \
 | 
			
		||||
		"pslldq	$4, %%xmm4 \n" \
 | 
			
		||||
		"pslldq $4, %%xmm4 \n" \
 | 
			
		||||
		"pxor %%xmm4, %%xmm3 \n" \
 | 
			
		||||
		"pxor %%xmm2, %%xmm3 \n" \
 | 
			
		||||
		"movaps	%%xmm3, "#round1"(%[sched]) \n"
 | 
			
		||||
		"movaps %%xmm3, "#round1"(%[sched]) \n"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
	void ECBCryptoAESNI::ExpandKey (const AESKey& key)
 | 
			
		||||
	{
 | 
			
		||||
		__asm__
 | 
			
		||||
| 
						 | 
				
			
			@ -753,16 +743,16 @@ namespace crypto
 | 
			
		|||
			KeyExpansion256(192,208)
 | 
			
		||||
			"aeskeygenassist $64, %%xmm3, %%xmm2 \n"
 | 
			
		||||
			// key expansion final
 | 
			
		||||
			"pshufd	$0xff, %%xmm2, %%xmm2 \n"
 | 
			
		||||
			"movaps	%%xmm1, %%xmm4 \n"
 | 
			
		||||
			"pslldq	$4, %%xmm4 \n"
 | 
			
		||||
			"pshufd $0xff, %%xmm2, %%xmm2 \n"
 | 
			
		||||
			"movaps %%xmm1, %%xmm4 \n"
 | 
			
		||||
			"pslldq $4, %%xmm4 \n"
 | 
			
		||||
			"pxor %%xmm4, %%xmm1 \n"
 | 
			
		||||
			"pslldq	$4, %%xmm4 \n"
 | 
			
		||||
			"pslldq $4, %%xmm4 \n"
 | 
			
		||||
			"pxor %%xmm4, %%xmm1 \n"
 | 
			
		||||
			"pslldq	$4, %%xmm4 \n"
 | 
			
		||||
			"pslldq $4, %%xmm4 \n"
 | 
			
		||||
			"pxor %%xmm4, %%xmm1 \n"
 | 
			
		||||
			"pxor %%xmm2, %%xmm1 \n"
 | 
			
		||||
			"movups	%%xmm1, 224(%[sched]) \n"
 | 
			
		||||
			"movups %%xmm1, 224(%[sched]) \n"
 | 
			
		||||
			: // output
 | 
			
		||||
			: [key]"r"((const uint8_t *)key), [sched]"r"(GetKeySchedule ()) // input
 | 
			
		||||
			: "%xmm1", "%xmm2", "%xmm3", "%xmm4", "memory" // clogged
 | 
			
		||||
| 
						 | 
				
			
			@ -771,7 +761,7 @@ namespace crypto
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
	#define EncryptAES256(sched) \
 | 
			
		||||
		"pxor (%["#sched"]), %%xmm0 \n" \
 | 
			
		||||
		"aesenc	16(%["#sched"]), %%xmm0 \n" \
 | 
			
		||||
| 
						 | 
				
			
			@ -792,14 +782,14 @@ namespace crypto
 | 
			
		|||
 | 
			
		||||
	void ECBEncryption::Encrypt (const ChipherBlock * in, ChipherBlock * out)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
		if(i2p::cpu::aesni)
 | 
			
		||||
		{
 | 
			
		||||
			__asm__
 | 
			
		||||
				(
 | 
			
		||||
					"movups	(%[in]), %%xmm0 \n"
 | 
			
		||||
					"movups (%[in]), %%xmm0 \n"
 | 
			
		||||
					EncryptAES256(sched)
 | 
			
		||||
					"movups	%%xmm0, (%[out]) \n"
 | 
			
		||||
					"movups %%xmm0, (%[out]) \n"
 | 
			
		||||
					: : [sched]"r"(GetKeySchedule ()), [in]"r"(in), [out]"r"(out) : "%xmm0", "memory"
 | 
			
		||||
					);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -810,7 +800,7 @@ namespace crypto
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
	#define DecryptAES256(sched) \
 | 
			
		||||
		"pxor 224(%["#sched"]), %%xmm0 \n" \
 | 
			
		||||
		"aesdec	208(%["#sched"]), %%xmm0 \n" \
 | 
			
		||||
| 
						 | 
				
			
			@ -831,14 +821,14 @@ namespace crypto
 | 
			
		|||
 | 
			
		||||
	void ECBDecryption::Decrypt (const ChipherBlock * in, ChipherBlock * out)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
		if(i2p::cpu::aesni)
 | 
			
		||||
		{
 | 
			
		||||
			__asm__
 | 
			
		||||
				(
 | 
			
		||||
					"movups	(%[in]), %%xmm0 \n"
 | 
			
		||||
					"movups (%[in]), %%xmm0 \n"
 | 
			
		||||
					DecryptAES256(sched)
 | 
			
		||||
					"movups	%%xmm0, (%[out]) \n"
 | 
			
		||||
					"movups %%xmm0, (%[out]) \n"
 | 
			
		||||
					: : [sched]"r"(GetKeySchedule ()), [in]"r"(in), [out]"r"(out) : "%xmm0", "memory"
 | 
			
		||||
					);
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -849,16 +839,16 @@ namespace crypto
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
	#define CallAESIMC(offset) \
 | 
			
		||||
		"movaps "#offset"(%[shed]), %%xmm0 \n"	\
 | 
			
		||||
		"movaps "#offset"(%[shed]), %%xmm0 \n" \
 | 
			
		||||
		"aesimc %%xmm0, %%xmm0 \n" \
 | 
			
		||||
		"movaps %%xmm0, "#offset"(%[shed]) \n"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	void ECBEncryption::SetKey (const AESKey& key)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
		if(i2p::cpu::aesni)
 | 
			
		||||
		{
 | 
			
		||||
			ExpandKey (key);
 | 
			
		||||
| 
						 | 
				
			
			@ -872,11 +862,11 @@ namespace crypto
 | 
			
		|||
 | 
			
		||||
	void ECBDecryption::SetKey (const AESKey& key)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
		if(i2p::cpu::aesni)
 | 
			
		||||
		{
 | 
			
		||||
			ExpandKey (key); // expand encryption key first
 | 
			
		||||
			// then  invert it using aesimc
 | 
			
		||||
			// then invert it using aesimc
 | 
			
		||||
			__asm__
 | 
			
		||||
				(
 | 
			
		||||
					CallAESIMC(16)
 | 
			
		||||
| 
						 | 
				
			
			@ -904,23 +894,23 @@ namespace crypto
 | 
			
		|||
 | 
			
		||||
	void CBCEncryption::Encrypt (int numBlocks, const ChipherBlock * in, ChipherBlock * out)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
		if(i2p::cpu::aesni)
 | 
			
		||||
		{
 | 
			
		||||
			__asm__
 | 
			
		||||
				(
 | 
			
		||||
					"movups	(%[iv]), %%xmm1 \n"
 | 
			
		||||
					"movups (%[iv]), %%xmm1 \n"
 | 
			
		||||
					"1: \n"
 | 
			
		||||
					"movups	(%[in]), %%xmm0 \n"
 | 
			
		||||
					"movups (%[in]), %%xmm0 \n"
 | 
			
		||||
					"pxor %%xmm1, %%xmm0 \n"
 | 
			
		||||
					EncryptAES256(sched)
 | 
			
		||||
					"movaps	%%xmm0, %%xmm1 \n"
 | 
			
		||||
					"movups	%%xmm0, (%[out]) \n"
 | 
			
		||||
					"movaps %%xmm0, %%xmm1 \n"
 | 
			
		||||
					"movups %%xmm0, (%[out]) \n"
 | 
			
		||||
					"add $16, %[in] \n"
 | 
			
		||||
					"add $16, %[out] \n"
 | 
			
		||||
					"dec %[num] \n"
 | 
			
		||||
					"jnz 1b \n"
 | 
			
		||||
					"movups	%%xmm1, (%[iv]) \n"
 | 
			
		||||
					"movups %%xmm1, (%[iv]) \n"
 | 
			
		||||
					:
 | 
			
		||||
					: [iv]"r"((uint8_t *)m_LastBlock), [sched]"r"(m_ECBEncryption.GetKeySchedule ()),
 | 
			
		||||
						[in]"r"(in), [out]"r"(out), [num]"r"(numBlocks)
 | 
			
		||||
| 
						 | 
				
			
			@ -949,17 +939,17 @@ namespace crypto
 | 
			
		|||
 | 
			
		||||
	void CBCEncryption::Encrypt (const uint8_t * in, uint8_t * out)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
		if(i2p::cpu::aesni)
 | 
			
		||||
		{
 | 
			
		||||
			__asm__
 | 
			
		||||
				(
 | 
			
		||||
					"movups	(%[iv]), %%xmm1 \n"
 | 
			
		||||
					"movups	(%[in]), %%xmm0 \n"
 | 
			
		||||
					"movups (%[iv]), %%xmm1 \n"
 | 
			
		||||
					"movups (%[in]), %%xmm0 \n"
 | 
			
		||||
					"pxor %%xmm1, %%xmm0 \n"
 | 
			
		||||
					EncryptAES256(sched)
 | 
			
		||||
					"movups	%%xmm0, (%[out]) \n"
 | 
			
		||||
					"movups	%%xmm0, (%[iv]) \n"
 | 
			
		||||
					"movups %%xmm0, (%[out]) \n"
 | 
			
		||||
					"movups %%xmm0, (%[iv]) \n"
 | 
			
		||||
					:
 | 
			
		||||
					: [iv]"r"((uint8_t *)m_LastBlock), [sched]"r"(m_ECBEncryption.GetKeySchedule ()),
 | 
			
		||||
						[in]"r"(in), [out]"r"(out)
 | 
			
		||||
| 
						 | 
				
			
			@ -973,24 +963,24 @@ namespace crypto
 | 
			
		|||
 | 
			
		||||
	void CBCDecryption::Decrypt (int numBlocks, const ChipherBlock * in, ChipherBlock * out)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
		if(i2p::cpu::aesni)
 | 
			
		||||
		{
 | 
			
		||||
			__asm__
 | 
			
		||||
				(
 | 
			
		||||
					"movups	(%[iv]), %%xmm1 \n"
 | 
			
		||||
					"movups (%[iv]), %%xmm1 \n"
 | 
			
		||||
					"1: \n"
 | 
			
		||||
					"movups	(%[in]), %%xmm0 \n"
 | 
			
		||||
					"movups (%[in]), %%xmm0 \n"
 | 
			
		||||
					"movaps %%xmm0, %%xmm2 \n"
 | 
			
		||||
					DecryptAES256(sched)
 | 
			
		||||
					"pxor %%xmm1, %%xmm0 \n"
 | 
			
		||||
					"movups	%%xmm0, (%[out]) \n"
 | 
			
		||||
					"movups %%xmm0, (%[out]) \n"
 | 
			
		||||
					"movaps %%xmm2, %%xmm1 \n"
 | 
			
		||||
					"add $16, %[in] \n"
 | 
			
		||||
					"add $16, %[out] \n"
 | 
			
		||||
					"dec %[num] \n"
 | 
			
		||||
					"jnz 1b \n"
 | 
			
		||||
					"movups	%%xmm1, (%[iv]) \n"
 | 
			
		||||
					"movups %%xmm1, (%[iv]) \n"
 | 
			
		||||
					:
 | 
			
		||||
					: [iv]"r"((uint8_t *)m_IV), [sched]"r"(m_ECBDecryption.GetKeySchedule ()),
 | 
			
		||||
						[in]"r"(in), [out]"r"(out), [num]"r"(numBlocks)
 | 
			
		||||
| 
						 | 
				
			
			@ -1019,17 +1009,17 @@ namespace crypto
 | 
			
		|||
 | 
			
		||||
	void CBCDecryption::Decrypt (const uint8_t * in, uint8_t * out)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
		if(i2p::cpu::aesni)
 | 
			
		||||
		{
 | 
			
		||||
			__asm__
 | 
			
		||||
				(
 | 
			
		||||
					"movups	(%[iv]), %%xmm1 \n"
 | 
			
		||||
					"movups	(%[in]), %%xmm0 \n"
 | 
			
		||||
					"movups	%%xmm0, (%[iv]) \n"
 | 
			
		||||
					"movups (%[iv]), %%xmm1 \n"
 | 
			
		||||
					"movups (%[in]), %%xmm0 \n"
 | 
			
		||||
					"movups %%xmm0, (%[iv]) \n"
 | 
			
		||||
					DecryptAES256(sched)
 | 
			
		||||
					"pxor %%xmm1, %%xmm0 \n"
 | 
			
		||||
					"movups	%%xmm0, (%[out]) \n"
 | 
			
		||||
					"movups %%xmm0, (%[out]) \n"
 | 
			
		||||
					:
 | 
			
		||||
					: [iv]"r"((uint8_t *)m_IV), [sched]"r"(m_ECBDecryption.GetKeySchedule ()),
 | 
			
		||||
						[in]"r"(in), [out]"r"(out)
 | 
			
		||||
| 
						 | 
				
			
			@ -1043,13 +1033,13 @@ namespace crypto
 | 
			
		|||
 | 
			
		||||
	void TunnelEncryption::Encrypt (const uint8_t * in, uint8_t * out)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
		if(i2p::cpu::aesni)
 | 
			
		||||
		{
 | 
			
		||||
			__asm__
 | 
			
		||||
				(
 | 
			
		||||
					// encrypt IV
 | 
			
		||||
					"movups	(%[in]), %%xmm0 \n"
 | 
			
		||||
					"movups (%[in]), %%xmm0 \n"
 | 
			
		||||
					EncryptAES256(sched_iv)
 | 
			
		||||
					"movaps %%xmm0, %%xmm1 \n"
 | 
			
		||||
					// double IV encryption
 | 
			
		||||
| 
						 | 
				
			
			@ -1059,11 +1049,11 @@ namespace crypto
 | 
			
		|||
					"1: \n"
 | 
			
		||||
					"add $16, %[in] \n"
 | 
			
		||||
					"add $16, %[out] \n"
 | 
			
		||||
					"movups	(%[in]), %%xmm0 \n"
 | 
			
		||||
					"movups (%[in]), %%xmm0 \n"
 | 
			
		||||
					"pxor %%xmm1, %%xmm0 \n"
 | 
			
		||||
					EncryptAES256(sched_l)
 | 
			
		||||
					"movaps	%%xmm0, %%xmm1 \n"
 | 
			
		||||
					"movups	%%xmm0, (%[out]) \n"
 | 
			
		||||
					"movaps %%xmm0, %%xmm1 \n"
 | 
			
		||||
					"movups %%xmm0, (%[out]) \n"
 | 
			
		||||
					"dec %[num] \n"
 | 
			
		||||
					"jnz 1b \n"
 | 
			
		||||
					:
 | 
			
		||||
| 
						 | 
				
			
			@ -1084,7 +1074,7 @@ namespace crypto
 | 
			
		|||
 | 
			
		||||
	void TunnelDecryption::Decrypt (const uint8_t * in, uint8_t * out)
 | 
			
		||||
	{
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
		if(i2p::cpu::aesni)
 | 
			
		||||
		{
 | 
			
		||||
			__asm__
 | 
			
		||||
| 
						 | 
				
			
			@ -1100,11 +1090,11 @@ namespace crypto
 | 
			
		|||
					"1: \n"
 | 
			
		||||
					"add $16, %[in] \n"
 | 
			
		||||
					"add $16, %[out] \n"
 | 
			
		||||
					"movups	(%[in]), %%xmm0 \n"
 | 
			
		||||
					"movups (%[in]), %%xmm0 \n"
 | 
			
		||||
					"movaps %%xmm0, %%xmm2 \n"
 | 
			
		||||
					DecryptAES256(sched_l)
 | 
			
		||||
					"pxor %%xmm1, %%xmm0 \n"
 | 
			
		||||
					"movups	%%xmm0, (%[out]) \n"
 | 
			
		||||
					"movups %%xmm0, (%[out]) \n"
 | 
			
		||||
					"movaps %%xmm2, %%xmm1 \n"
 | 
			
		||||
					"dec %[num] \n"
 | 
			
		||||
					"jnz 1b \n"
 | 
			
		||||
| 
						 | 
				
			
			@ -1327,23 +1317,23 @@ namespace crypto
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	void NoiseSymmetricState::MixHash (const uint8_t * buf, size_t len)
 | 
			
		||||
    {
 | 
			
		||||
    	SHA256_CTX ctx;
 | 
			
		||||
        SHA256_Init (&ctx);
 | 
			
		||||
        SHA256_Update (&ctx, m_H, 32);
 | 
			
		||||
        SHA256_Update (&ctx, buf, len);
 | 
			
		||||
        SHA256_Final (m_H, &ctx);
 | 
			
		||||
    }
 | 
			
		||||
	{
 | 
			
		||||
		SHA256_CTX ctx;
 | 
			
		||||
		SHA256_Init (&ctx);
 | 
			
		||||
		SHA256_Update (&ctx, m_H, 32);
 | 
			
		||||
		SHA256_Update (&ctx, buf, len);
 | 
			
		||||
		SHA256_Final (m_H, &ctx);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    void NoiseSymmetricState::MixKey (const uint8_t * sharedSecret)
 | 
			
		||||
    {
 | 
			
		||||
        HKDF (m_CK, sharedSecret, 32, "", m_CK);
 | 
			
		||||
	void NoiseSymmetricState::MixKey (const uint8_t * sharedSecret)
 | 
			
		||||
	{
 | 
			
		||||
		HKDF (m_CK, sharedSecret, 32, "", m_CK);
 | 
			
		||||
		// new ck is m_CK[0:31], key is m_CK[32:63]
 | 
			
		||||
    }
 | 
			
		||||
	
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
// init and terminate
 | 
			
		||||
 | 
			
		||||
/*	std::vector <std::unique_ptr<std::mutex> >  m_OpenSSLMutexes;
 | 
			
		||||
/*	std::vector <std::unique_ptr<std::mutex> > m_OpenSSLMutexes;
 | 
			
		||||
	static void OpensslLockingCallback(int mode, int type, const char * file, int line)
 | 
			
		||||
	{
 | 
			
		||||
		if (type > 0 && (size_t)type < m_OpenSSLMutexes.size ())
 | 
			
		||||
| 
						 | 
				
			
			@ -1354,7 +1344,7 @@ namespace crypto
 | 
			
		|||
				m_OpenSSLMutexes[type]->unlock ();
 | 
			
		||||
		}
 | 
			
		||||
	}*/
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	void InitCrypto (bool precomputation)
 | 
			
		||||
	{
 | 
			
		||||
		i2p::cpu::Detect ();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -169,9 +169,6 @@ namespace crypto
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
#ifdef __AES__
 | 
			
		||||
	#ifdef ARM64AES
 | 
			
		||||
		void init_aesenc(void) __attribute__((constructor));
 | 
			
		||||
	#endif
 | 
			
		||||
	class ECBCryptoAESNI
 | 
			
		||||
	{
 | 
			
		||||
		public:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -829,8 +829,6 @@ namespace data
 | 
			
		|||
	{
 | 
			
		||||
		XORMetric m;
 | 
			
		||||
#if defined(__x86_64__) || defined(__i386__)
 | 
			
		||||
#pragma GCC push_options
 | 
			
		||||
#pragma GCC target("avx")
 | 
			
		||||
		if(i2p::cpu::avx)
 | 
			
		||||
		{
 | 
			
		||||
			__asm__
 | 
			
		||||
| 
						 | 
				
			
			@ -845,7 +843,6 @@ namespace data
 | 
			
		|||
			);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
#pragma GCC pop_options
 | 
			
		||||
#endif
 | 
			
		||||
		{
 | 
			
		||||
			const uint64_t * hash1 = key1.GetLL (), * hash2 = key2.GetLL ();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue