mirror of
				https://git.zx2c4.com/wireguard-go
				synced 2025-10-31 03:46:20 +08:00 
			
		
		
		
	device: simplify copying counter to nonce
Since we already have it packed into a uint64 in a known byte order, write it back out again the same byte order instead of copying byte by byte. This should also generate more efficient code, because the compiler can do a single uint64 write, instead of eight bounds checks and eight byte writes. Due to a missed optimization, it actually generates a mishmash of smaller writes: 1 byte, 4 bytes, 2 bytes, 1 byte. This is https://golang.org/issue/41663. The code is still better than before, and will get better yet once that compiler bug gets fixed. Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
This commit is contained in:
		 Josh Bleecher Snyder
					Josh Bleecher Snyder
				
			
				
					committed by
					
						 Jason A. Donenfeld
						Jason A. Donenfeld
					
				
			
			
				
	
			
			
			 Jason A. Donenfeld
						Jason A. Donenfeld
					
				
			
						parent
						
							94b33ba705
						
					
				
				
					commit
					41cd68416c
				
			| @@ -268,22 +268,12 @@ func (device *Device) RoutineDecryption() { | |||||||
| 			counter := elem.packet[MessageTransportOffsetCounter:MessageTransportOffsetContent] | 			counter := elem.packet[MessageTransportOffsetCounter:MessageTransportOffsetContent] | ||||||
| 			content := elem.packet[MessageTransportOffsetContent:] | 			content := elem.packet[MessageTransportOffsetContent:] | ||||||
|  |  | ||||||
| 			// expand nonce |  | ||||||
|  |  | ||||||
| 			nonce[0x4] = counter[0x0] |  | ||||||
| 			nonce[0x5] = counter[0x1] |  | ||||||
| 			nonce[0x6] = counter[0x2] |  | ||||||
| 			nonce[0x7] = counter[0x3] |  | ||||||
|  |  | ||||||
| 			nonce[0x8] = counter[0x4] |  | ||||||
| 			nonce[0x9] = counter[0x5] |  | ||||||
| 			nonce[0xa] = counter[0x6] |  | ||||||
| 			nonce[0xb] = counter[0x7] |  | ||||||
|  |  | ||||||
| 			// decrypt and release to consumer | 			// decrypt and release to consumer | ||||||
|  |  | ||||||
| 			var err error | 			var err error | ||||||
| 			elem.counter = binary.LittleEndian.Uint64(counter) | 			elem.counter = binary.LittleEndian.Uint64(counter) | ||||||
|  | 			// copy counter to nonce | ||||||
|  | 			binary.LittleEndian.PutUint64(nonce[0x4:0xc], elem.counter) | ||||||
| 			elem.packet, err = elem.keypair.receive.Open( | 			elem.packet, err = elem.keypair.receive.Open( | ||||||
| 				content[:0], | 				content[:0], | ||||||
| 				nonce[:], | 				nonce[:], | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user