diff options
Diffstat (limited to 'drivers/staging/vt6655/michael.c')
| -rw-r--r-- | drivers/staging/vt6655/michael.c | 181 |
1 files changed, 74 insertions, 107 deletions
diff --git a/drivers/staging/vt6655/michael.c b/drivers/staging/vt6655/michael.c index c930e0cdb85..edee48777aa 100644 --- a/drivers/staging/vt6655/michael.c +++ b/drivers/staging/vt6655/michael.c @@ -26,8 +26,8 @@ * Date: Sep 4, 2002 * * Functions: - * s_dwGetUINT32 - Convert from BYTE[] to DWORD in a portable way - * s_vPutUINT32 - Convert from DWORD to BYTE[] in a portable way + * s_dwGetUINT32 - Convert from unsigned char [] to unsigned long in a portable way + * s_vPutUINT32 - Convert from unsigned long to unsigned char [] in a portable way * s_vClear - Reset the state to the empty message. * s_vSetKey - Set the key. * MIC_vInit - Set the key. @@ -47,135 +47,102 @@ /*--------------------- Static Variables --------------------------*/ /*--------------------- Static Functions --------------------------*/ -/* -static DWORD s_dwGetUINT32(BYTE * p); // Get DWORD from 4 bytes LSByte first -static VOID s_vPutUINT32(BYTE* p, DWORD val); // Put DWORD into 4 bytes LSByte first -*/ -static VOID s_vClear(void); // Clear the internal message, - // resets the object to the state just after construction. -static VOID s_vSetKey(DWORD dwK0, DWORD dwK1); -static VOID s_vAppendByte(BYTE b); // Add a single byte to the internal message + +static void s_vClear(void); // Clear the internal message, +// resets the object to the state just after construction. +static void s_vSetKey(u32 dwK0, u32 dwK1); +static void s_vAppendByte(unsigned char b); // Add a single byte to the internal message /*--------------------- Export Variables --------------------------*/ -static DWORD L, R; // Current state +static u32 L, R; /* Current state */ -static DWORD K0, K1; // Key -static DWORD M; // Message accumulator (single word) -static UINT nBytesInM; // # bytes in M +static u32 K0, K1; /* Key */ +static u32 M; /* Message accumulator (single word) */ +static unsigned int nBytesInM; // # bytes in M /*--------------------- Export Functions --------------------------*/ -/* -static DWORD s_dwGetUINT32 (BYTE * p) -// Convert from BYTE[] to DWORD in a portable way +static void s_vClear(void) { - DWORD res = 0; - UINT i; - for(i=0; i<4; i++ ) - { - res |= (*p++) << (8*i); - } - return res; + // Reset the state to the empty message. + L = K0; + R = K1; + nBytesInM = 0; + M = 0; } -static VOID s_vPutUINT32 (BYTE* p, DWORD val) -// Convert from DWORD to BYTE[] in a portable way +static void s_vSetKey(u32 dwK0, u32 dwK1) { - UINT i; - for(i=0; i<4; i++ ) - { - *p++ = (BYTE) (val & 0xff); - val >>= 8; - } + // Set the key + K0 = dwK0; + K1 = dwK1; + // and reset the message + s_vClear(); } -*/ -static VOID s_vClear (void) +static void s_vAppendByte(unsigned char b) { - // Reset the state to the empty message. - L = K0; - R = K1; - nBytesInM = 0; - M = 0; + // Append the byte to our word-sized buffer + M |= b << (8*nBytesInM); + nBytesInM++; + // Process the word if it is full. + if (nBytesInM >= 4) { + L ^= M; + R ^= ROL32(L, 17); + L += R; + R ^= ((L & 0xff00ff00) >> 8) | ((L & 0x00ff00ff) << 8); + L += R; + R ^= ROL32(L, 3); + L += R; + R ^= ROR32(L, 2); + L += R; + // Clear the buffer + M = 0; + nBytesInM = 0; + } } -static VOID s_vSetKey (DWORD dwK0, DWORD dwK1) +void MIC_vInit(u32 dwK0, u32 dwK1) { - // Set the key - K0 = dwK0; - K1 = dwK1; - // and reset the message - s_vClear(); + // Set the key + s_vSetKey(dwK0, dwK1); } -static VOID s_vAppendByte (BYTE b) +void MIC_vUnInit(void) { - // Append the byte to our word-sized buffer - M |= b << (8*nBytesInM); - nBytesInM++; - // Process the word if it is full. - if( nBytesInM >= 4 ) - { - L ^= M; - R ^= ROL32( L, 17 ); - L += R; - R ^= ((L & 0xff00ff00) >> 8) | ((L & 0x00ff00ff) << 8); - L += R; - R ^= ROL32( L, 3 ); - L += R; - R ^= ROR32( L, 2 ); - L += R; - // Clear the buffer - M = 0; - nBytesInM = 0; - } -} + // Wipe the key material + K0 = 0; + K1 = 0; -VOID MIC_vInit (DWORD dwK0, DWORD dwK1) -{ - // Set the key - s_vSetKey(dwK0, dwK1); + // And the other fields as well. + //Note that this sets (L,R) to (K0,K1) which is just fine. + s_vClear(); } - -VOID MIC_vUnInit (void) +void MIC_vAppend(unsigned char *src, unsigned int nBytes) { - // Wipe the key material - K0 = 0; - K1 = 0; - - // And the other fields as well. - //Note that this sets (L,R) to (K0,K1) which is just fine. - s_vClear(); + // This is simple + while (nBytes > 0) { + s_vAppendByte(*src++); + nBytes--; + } } -VOID MIC_vAppend (PBYTE src, UINT nBytes) +void MIC_vGetMIC(u32 *pdwL, u32 *pdwR) { - // This is simple - while (nBytes > 0) - { - s_vAppendByte(*src++); - nBytes--; - } + // Append the minimum padding + s_vAppendByte(0x5a); + s_vAppendByte(0); + s_vAppendByte(0); + s_vAppendByte(0); + s_vAppendByte(0); + // and then zeroes until the length is a multiple of 4 + while (nBytesInM != 0) + s_vAppendByte(0); + + // The s_vAppendByte function has already computed the result. + *pdwL = L; + *pdwR = R; + // Reset to the empty message. + s_vClear(); } - -VOID MIC_vGetMIC (PDWORD pdwL, PDWORD pdwR) -{ - // Append the minimum padding - s_vAppendByte(0x5a); - s_vAppendByte(0); - s_vAppendByte(0); - s_vAppendByte(0); - s_vAppendByte(0); - // and then zeroes until the length is a multiple of 4 - while( nBytesInM != 0 ) - { - s_vAppendByte(0); - } - // The s_vAppendByte function has already computed the result. - *pdwL = L; - *pdwR = R; - // Reset to the empty message. - s_vClear(); -} - |
