mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
| Implementation by the Keccak, Keyak and Ketje Teams, namely, Guido Bertoni,
 | |
| Joan Daemen, Michaƫl Peeters, Gilles Van Assche and Ronny Van Keer, hereby
 | |
| denoted as "the implementer".
 | |
| 
 | |
| For more information, feedback or questions, please refer to our websites:
 | |
| http://keccak.noekeon.org/
 | |
| http://keyak.noekeon.org/
 | |
| http://ketje.noekeon.org/
 | |
| 
 | |
| To the extent possible under law, the implementer has waived all copyright
 | |
| and related or neighboring rights to the source code in this file.
 | |
| http://creativecommons.org/publicdomain/zero/1.0/
 | |
| */
 | |
| 
 | |
| #ifndef _SnP_Relaned_h_
 | |
| #define _SnP_Relaned_h_
 | |
| 
 | |
| #define SnP_AddBytes(state, data, offset, length, SnP_AddLanes, SnP_AddBytesInLane, SnP_laneLengthInBytes) \
 | |
|     { \
 | |
|         if ((offset) == 0) { \
 | |
|             SnP_AddLanes(state, data, (length)/SnP_laneLengthInBytes); \
 | |
|             SnP_AddBytesInLane(state, \
 | |
|                 (length)/SnP_laneLengthInBytes, \
 | |
|                 (data)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \
 | |
|                 0, \
 | |
|                 (length)%SnP_laneLengthInBytes); \
 | |
|         } \
 | |
|         else { \
 | |
|             unsigned int _sizeLeft = (length); \
 | |
|             unsigned int _lanePosition = (offset)/SnP_laneLengthInBytes; \
 | |
|             unsigned int _offsetInLane = (offset)%SnP_laneLengthInBytes; \
 | |
|             const unsigned char *_curData = (data); \
 | |
|             while(_sizeLeft > 0) { \
 | |
|                 unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \
 | |
|                 if (_bytesInLane > _sizeLeft) \
 | |
|                     _bytesInLane = _sizeLeft; \
 | |
|                 SnP_AddBytesInLane(state, _lanePosition, _curData, _offsetInLane, _bytesInLane); \
 | |
|                 _sizeLeft -= _bytesInLane; \
 | |
|                 _lanePosition++; \
 | |
|                 _offsetInLane = 0; \
 | |
|                 _curData += _bytesInLane; \
 | |
|             } \
 | |
|         } \
 | |
|     }
 | |
| 
 | |
| #define SnP_OverwriteBytes(state, data, offset, length, SnP_OverwriteLanes, SnP_OverwriteBytesInLane, SnP_laneLengthInBytes) \
 | |
|     { \
 | |
|         if ((offset) == 0) { \
 | |
|             SnP_OverwriteLanes(state, data, (length)/SnP_laneLengthInBytes); \
 | |
|             SnP_OverwriteBytesInLane(state, \
 | |
|                 (length)/SnP_laneLengthInBytes, \
 | |
|                 (data)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \
 | |
|                 0, \
 | |
|                 (length)%SnP_laneLengthInBytes); \
 | |
|         } \
 | |
|         else { \
 | |
|             unsigned int _sizeLeft = (length); \
 | |
|             unsigned int _lanePosition = (offset)/SnP_laneLengthInBytes; \
 | |
|             unsigned int _offsetInLane = (offset)%SnP_laneLengthInBytes; \
 | |
|             const unsigned char *_curData = (data); \
 | |
|             while(_sizeLeft > 0) { \
 | |
|                 unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \
 | |
|                 if (_bytesInLane > _sizeLeft) \
 | |
|                     _bytesInLane = _sizeLeft; \
 | |
|                 SnP_OverwriteBytesInLane(state, _lanePosition, _curData, _offsetInLane, _bytesInLane); \
 | |
|                 _sizeLeft -= _bytesInLane; \
 | |
|                 _lanePosition++; \
 | |
|                 _offsetInLane = 0; \
 | |
|                 _curData += _bytesInLane; \
 | |
|             } \
 | |
|         } \
 | |
|     }
 | |
| 
 | |
| #define SnP_ExtractBytes(state, data, offset, length, SnP_ExtractLanes, SnP_ExtractBytesInLane, SnP_laneLengthInBytes) \
 | |
|     { \
 | |
|         if ((offset) == 0) { \
 | |
|             SnP_ExtractLanes(state, data, (length)/SnP_laneLengthInBytes); \
 | |
|             SnP_ExtractBytesInLane(state, \
 | |
|                 (length)/SnP_laneLengthInBytes, \
 | |
|                 (data)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \
 | |
|                 0, \
 | |
|                 (length)%SnP_laneLengthInBytes); \
 | |
|         } \
 | |
|         else { \
 | |
|             unsigned int _sizeLeft = (length); \
 | |
|             unsigned int _lanePosition = (offset)/SnP_laneLengthInBytes; \
 | |
|             unsigned int _offsetInLane = (offset)%SnP_laneLengthInBytes; \
 | |
|             unsigned char *_curData = (data); \
 | |
|             while(_sizeLeft > 0) { \
 | |
|                 unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \
 | |
|                 if (_bytesInLane > _sizeLeft) \
 | |
|                     _bytesInLane = _sizeLeft; \
 | |
|                 SnP_ExtractBytesInLane(state, _lanePosition, _curData, _offsetInLane, _bytesInLane); \
 | |
|                 _sizeLeft -= _bytesInLane; \
 | |
|                 _lanePosition++; \
 | |
|                 _offsetInLane = 0; \
 | |
|                 _curData += _bytesInLane; \
 | |
|             } \
 | |
|         } \
 | |
|     }
 | |
| 
 | |
| #define SnP_ExtractAndAddBytes(state, input, output, offset, length, SnP_ExtractAndAddLanes, SnP_ExtractAndAddBytesInLane, SnP_laneLengthInBytes) \
 | |
|     { \
 | |
|         if ((offset) == 0) { \
 | |
|             SnP_ExtractAndAddLanes(state, input, output, (length)/SnP_laneLengthInBytes); \
 | |
|             SnP_ExtractAndAddBytesInLane(state, \
 | |
|                 (length)/SnP_laneLengthInBytes, \
 | |
|                 (input)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \
 | |
|                 (output)+((length)/SnP_laneLengthInBytes)*SnP_laneLengthInBytes, \
 | |
|                 0, \
 | |
|                 (length)%SnP_laneLengthInBytes); \
 | |
|         } \
 | |
|         else { \
 | |
|             unsigned int _sizeLeft = (length); \
 | |
|             unsigned int _lanePosition = (offset)/SnP_laneLengthInBytes; \
 | |
|             unsigned int _offsetInLane = (offset)%SnP_laneLengthInBytes; \
 | |
|             const unsigned char *_curInput = (input); \
 | |
|             unsigned char *_curOutput = (output); \
 | |
|             while(_sizeLeft > 0) { \
 | |
|                 unsigned int _bytesInLane = SnP_laneLengthInBytes - _offsetInLane; \
 | |
|                 if (_bytesInLane > _sizeLeft) \
 | |
|                     _bytesInLane = _sizeLeft; \
 | |
|                 SnP_ExtractAndAddBytesInLane(state, _lanePosition, _curInput, _curOutput, _offsetInLane, _bytesInLane); \
 | |
|                 _sizeLeft -= _bytesInLane; \
 | |
|                 _lanePosition++; \
 | |
|                 _offsetInLane = 0; \
 | |
|                 _curInput += _bytesInLane; \
 | |
|                 _curOutput += _bytesInLane; \
 | |
|             } \
 | |
|         } \
 | |
|     }
 | |
| 
 | |
| #endif
 | 
