mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	 98066f2f89
			
		
	
	
		98066f2f89
		
	
	
	
	
		
			
			The ChaCha state matrix is 16 32-bit words.  Currently it is represented
in the code as a raw u32 array, or even just a pointer to u32.  This
weak typing is error-prone.  Instead, introduce struct chacha_state:
    struct chacha_state {
            u32 x[16];
    };
Convert all ChaCha and HChaCha functions to use struct chacha_state.
No functional changes.
Signed-off-by: Eric Biggers <ebiggers@google.com>
Acked-by: Kent Overstreet <kent.overstreet@linux.dev>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
		
	
			
		
			
				
	
	
		
			36 lines
		
	
	
	
		
			966 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
	
		
			966 B
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0-or-later
 | |
| /*
 | |
|  * The ChaCha stream cipher (RFC7539)
 | |
|  *
 | |
|  * Copyright (C) 2015 Martin Willi
 | |
|  */
 | |
| 
 | |
| #include <linux/kernel.h>
 | |
| #include <linux/export.h>
 | |
| #include <linux/module.h>
 | |
| 
 | |
| #include <crypto/algapi.h> // for crypto_xor_cpy
 | |
| #include <crypto/chacha.h>
 | |
| 
 | |
| void chacha_crypt_generic(struct chacha_state *state, u8 *dst, const u8 *src,
 | |
| 			  unsigned int bytes, int nrounds)
 | |
| {
 | |
| 	/* aligned to potentially speed up crypto_xor() */
 | |
| 	u8 stream[CHACHA_BLOCK_SIZE] __aligned(sizeof(long));
 | |
| 
 | |
| 	while (bytes >= CHACHA_BLOCK_SIZE) {
 | |
| 		chacha_block_generic(state, stream, nrounds);
 | |
| 		crypto_xor_cpy(dst, src, stream, CHACHA_BLOCK_SIZE);
 | |
| 		bytes -= CHACHA_BLOCK_SIZE;
 | |
| 		dst += CHACHA_BLOCK_SIZE;
 | |
| 		src += CHACHA_BLOCK_SIZE;
 | |
| 	}
 | |
| 	if (bytes) {
 | |
| 		chacha_block_generic(state, stream, nrounds);
 | |
| 		crypto_xor_cpy(dst, src, stream, bytes);
 | |
| 	}
 | |
| }
 | |
| EXPORT_SYMBOL(chacha_crypt_generic);
 | |
| 
 | |
| MODULE_DESCRIPTION("ChaCha stream cipher (RFC7539)");
 | |
| MODULE_LICENSE("GPL");
 |