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 */ | #endif  /* LTC_HKDF */ | ||||||
| 
 | 
 | ||||||
| /* ---- MEM routines ---- */ | /* ---- MEM routines ---- */ | ||||||
|  | int mem_neq(const void *a, const void *b, size_t len); | ||||||
| void zeromem(volatile void *dst, size_t len); | void zeromem(volatile void *dst, size_t len); | ||||||
| void burn_stack(unsigned long 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