add constant-time memcmp()
[skip ci]
This commit is contained in:
		
							parent
							
								
									ddca3d6422
								
							
						
					
					
						commit
						26c5d54e5c
					
				| @ -39,6 +39,7 @@ int hkdf(int hash_idx, | ||||
| #endif  /* LTC_HKDF */ | ||||
| 
 | ||||
| /* ---- MEM routines ---- */ | ||||
| int mem_neq(const void *a, const void *b, size_t len); | ||||
| void zeromem(volatile void *dst, size_t len); | ||||
| void burn_stack(unsigned long len); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										55
									
								
								src/misc/mem_neq.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/misc/mem_neq.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | ||||
| /* LibTomCrypt, modular cryptographic library -- Tom St Denis
 | ||||
|  * | ||||
|  * LibTomCrypt is a library that provides various cryptographic | ||||
|  * algorithms in a highly modular and flexible manner. | ||||
|  * | ||||
|  * The library is free for all purposes without any express | ||||
|  * guarantee it works. | ||||
|  * | ||||
|  * Tom St Denis, tomstdenis@gmail.com, http://libtom.org
 | ||||
|  */ | ||||
| #include "tomcrypt.h" | ||||
| 
 | ||||
| /**
 | ||||
|    @file mem_neq.c | ||||
|    Compare two blocks of memory for inequality. | ||||
|    Steffen Jaeckel | ||||
| */ | ||||
| 
 | ||||
| /**
 | ||||
|    Compare two blocks of memory for inequality. | ||||
| 
 | ||||
|    The usage is similar to that of standard memcmp(), but you can only test | ||||
|    if the memory is equal or not - you can not determine by how much the | ||||
|    first different byte differs. | ||||
| 
 | ||||
|    @param a     The first memory region | ||||
|    @param b     The second memory region | ||||
|    @param len   The length of the area to compare (octets) | ||||
| 
 | ||||
|    @return 0 when a and b are equal for len bytes, else they are not equal. | ||||
| */ | ||||
| int mem_neq(const void *a, const void *b, size_t len) | ||||
| { | ||||
|    unsigned char ret = 0; | ||||
|    const unsigned char* pa; | ||||
|    const unsigned char* pb; | ||||
| 
 | ||||
|    LTC_ARGCHK(a != NULL); | ||||
|    LTC_ARGCHK(b != NULL); | ||||
| 
 | ||||
|    pa = a; | ||||
|    pb = b; | ||||
| 
 | ||||
|    while (len-- > 0) { | ||||
|       ret |= *pa ^ *pb; | ||||
|       ++pa; | ||||
|       ++pb; | ||||
|    } | ||||
| 
 | ||||
|    return ret; | ||||
| } | ||||
| 
 | ||||
| /* $Source$ */ | ||||
| /* $Revision$ */ | ||||
| /* $Date$ */ | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user