⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 michael.c

📁 VIA VT6656 USB linux source code.
💻 C
字号:
/* * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. * All rights reserved. * * This software is copyrighted by and is the sole property of * VIA Networking Technologies, Inc. This software may only be used * in accordance with the corresponding license agreement. Any unauthorized * use, duplication, transmission, distribution, or disclosure of this * software is expressly forbidden. * * This software is provided by VIA Networking Technologies, Inc. "as is" * and any express or implied warranties, including, but not limited to, the * implied warranties of merchantability and fitness for a particular purpose * are disclaimed. In no event shall VIA Networking Technologies, Inc. * be liable for any direct, indirect, incidental, special, exemplary, or * consequential damages. * * * File: michael.cpp * * Purpose: The implementation of LIST data structure. * * Author: Kyle Hsu * * 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_vClear - Reset the state to the empty message. *      s_vSetKey - Set the key. *      MIC_vInit - Set the key. *      s_vAppendByte - Append the byte to our word-sized buffer. *      MIC_vAppend - call s_vAppendByte. *      MIC_vGetMIC - Append the minimum padding and call s_vAppendByte. * * Revision History: * */#if !defined(__TMACRO_H__)#include "tmacro.h"#endif#if !defined(__TBIT_H__)#include "tbit.h"#endif#if !defined(__MICHAEL_H__)#include "michael.h"#endif/*---------------------  Static Definitions -------------------------*//*---------------------  Static Variables  --------------------------*//*---------------------  Static Functions  --------------------------*//*static DWORD s_dwGetUINT32(BYTE * p);         // Get DWORD from 4 bytes LSByte firststatic 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/*---------------------  Export Variables  --------------------------*/static DWORD  L, R;           // Current statestatic DWORD  K0, K1;         // Key static DWORD  M;              // Message accumulator (single word)static UINT   nBytesInM;      // # bytes in M/*---------------------  Export Functions  --------------------------*//*static DWORD s_dwGetUINT32 (BYTE * p)// Convert from BYTE[] to DWORD in a portable way{    DWORD res = 0;    UINT i;    for(i=0; i<4; i++ )    {        res |= (*p++) << (8*i);    }    return res;}static VOID s_vPutUINT32 (BYTE* p, DWORD val)// Convert from DWORD to BYTE[] in a portable way{    UINT i;    for(i=0; i<4; i++ )    {        *p++ = (BYTE) (val & 0xff);        val >>= 8;    }}*/static VOID s_vClear (void){    // Reset the state to the empty message.    L = K0;    R = K1;    nBytesInM = 0;    M = 0;}static VOID s_vSetKey (DWORD dwK0, DWORD dwK1){    // Set the key    K0 = dwK0;    K1 = dwK1;    // and reset the message    s_vClear();}static VOID s_vAppendByte (BYTE b){    // 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;    }}VOID MIC_vInit (DWORD dwK0, DWORD dwK1){    // Set the key    s_vSetKey(dwK0, dwK1);}VOID MIC_vUnInit (void){    // 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();}VOID MIC_vAppend (PBYTE src, UINT nBytes){    // This is simple    while (nBytes > 0)    {        s_vAppendByte(*src++);        nBytes--;    }}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();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -