Пример #1
0
 int Envir_message::C2000_BB3_Data(unsigned char *data, DevMonitorDataPtr data_ptr, int nDataLen, int &iaddcode)
 {
     iaddcode = d_devInfo.iAddressCode;
     if(data[7]==0x02)
     {
         unsigned char bdata1;
         bdata1 = data[9];
         DataInfo dainfo;
         dainfo.bType = true;
         for(int i=0;i<8;++i)
         {
             dainfo.fValue =  Getbit(bdata1,i);
             data_ptr->mValues[i] = dainfo;
         }
     }
     else if(data[1]==0x01)
     {
         unsigned char bdata1;
         bdata1 = data[9];
         DataInfo dainfo;
         dainfo.bType = true;
         for(int i=0;i<2;++i)
         {
             dainfo.fValue =  Getbit(bdata1,i);
             data_ptr->mValues[i+8] = dainfo;
         }
     }
     return RE_SUCCESS;
 }
Пример #2
0
    int Envir_message::NT511_AD_Data(unsigned char *data, DevMonitorDataPtr data_ptr, int nDataLen, int &iaddcode)
    {
        iaddcode = data[0];
        DataInfo dainfo;
        dainfo.bType = false;
        for(int i=0;i<4;++i)
        {
            dainfo.fValue = data[3+2*i]*256+data[4+2*i]-20;
            data_ptr->mValues[i] = dainfo;
        }
        dainfo.bType = true;
        for(int j=0;j<4;++j)
        {
            dainfo.fValue = Getbit(data[12+2*j],1);
            data_ptr->mValues[4+6*j] = dainfo;
            dainfo.fValue = Getbit(data[12+2*j],2);
            data_ptr->mValues[5+6*j] = dainfo;
            dainfo.fValue = Getbit(data[12+2*j],3);
            data_ptr->mValues[6+6*j] = dainfo;
            dainfo.fValue = Getbit(data[12+2*j],4);
            data_ptr->mValues[7+6*j] = dainfo;
            dainfo.fValue = Getbit(data[12+2*j],6);
            data_ptr->mValues[8+6*j] = dainfo;
            dainfo.fValue = Getbit(data[12+2*j],7);
            data_ptr->mValues[9+6*j] = dainfo;
        }


        //cout<<"wendu="<<data_ptr->mValues[0].fValue<<"--"<<data_ptr->mValues[1].fValue<<"--"<<data_ptr->mValues[2].fValue<<endl;

         return RE_SUCCESS;
    }
Пример #3
0
//////////////////////////////////////////////////////////////////////
// Перекодирование исходных данных в "строку" 
void CInKey::ConvertSourceToBitData(char *prgbSourceBuffer,
                                    long int lSourceSize,
                                    char *prgbBitData)
{
   long int i, j;

   int nbit;

   // Обрабатываем каждый из символов исходной гаммы...
   for (i = 0, j = 0; i < lSourceSize; i++)
   {
       // В байте 8 бит, извлекаем каждый...
       for (nbit = 0; nbit < NBITS; nbit++, j++)
       {
            prgbBitData[j] = Getbit(prgbSourceBuffer[i], nbit);          
       }       
   }   
}
Пример #4
0
//////////////////////////////////////////////////////////////////////
// УСТАНАВЛИВАЕТ ИНДЕКС iMVS и РЕАЛИЗУЕТ ЕГО (перемешивание битов)
void CInKey::MixBitData(long int lSourceSize,
                        char *prgbPasswordBuffer,
                        char *prgbBitData, long int L, long int R,
                        int mode)
{
    int iMVS; // Индекс в массиве указателей на char-векторы
              // перестановок

    int nbit, nbit2 = 0;

    long int i, lIndexTarget, lIndexSource;

    // Этот union необходим для формирования индекса в MVS
    // Индекс складывается из двух байтов парольного блока
    // При следующей итерации происходит смещение "рамки
    // считывания" двух байт по буферу парольного файла
    static TCharToInt charToInt;

    // Инициализируем "исходный" блок данных в union-е
    // данными, взятыми из парольного блока данных    
    charToInt.rgbVariable[0] = prgbPasswordBuffer[L];
    charToInt.rgbVariable[1] = prgbPasswordBuffer[R];

    // Осуществляем преобразование Char[2] --> Int
    iMVS = charToInt.intVariable;

    // Нормализуем индекс ВЫБОРА ТЕКУЩЕГО ВЕКТОРА
    if (iMVS > (MVS_NUM - 1))
    {
        iMVS -= MVS_NUM;
    }

    // РЕАЛИЗУЕМ ВЕКТОР ПЕРЕСТАНОВКИ ДАННЫХ:
    // Необходимо ВСЕ    N-е   Б И Т Ы    исходного блока
    // поместить в  N-ый  "С Т О Л Б Е Ц"  блока-близнеца
    for (nbit = 0; nbit < NBITS; nbit++)
    {
        // N-ых битов столько, сколько байтов в блоке исходных данных
        for (i = 0; i < lSourceSize; i++)
        {
            // При переносе данных всегда пишем в массив-близнец
            // НОРМАЛЬНАЯ АДРЕСАЦИЯ - ЧТЕНИЕ ПО СТРОКАМ -
            // nbit * lSourceSize + i
            // ТРАНСПОНИРОВАННАЯ АДРЕСАЦИЯ - ЧТЕНИЕ ПО СТОЛБЦАМ -
            // nbit * i + lSourceSize

            // Режим адресации напрямую зависит от режима работы
            // программы - шифрование или расшифровка
            switch (mode)
            {
                case ENCRYPT:
                {        
                    // Берем по вектору - пишем подряд    
                    lIndexSource = (long int)((prgubMVS[iMVS * NBITS + nbit])\
                                               * lSourceSize + i);
                    lIndexTarget = nbit * lSourceSize + i;

                    break;
                }

                case DECRYPT:
                {
                    // Берем подряд - пишем по вектору    
                    lIndexSource = nbit * lSourceSize + i;
                    lIndexTarget = (long int)prgubMVS[iMVS * NBITS + nbit]\
                                             * lSourceSize + i;
                }                
            }        
                
            // Учитываем возможное смещение на вторую часть массива
            // "битовых" данных
            // Если читаем из второй части массива, то
            // bitDataPosition != 0, следовательно, необходимо
            // добавить "довесок" к "исходному" индексу...
            if (bitDataPosition != 0)
            {
                lIndexSource += (NBITS * lSourceSize);

            } else
            // ... а если bitDataPosition==0, то для 
            // корректной записи в более высокий слой
            // также вносим "довесок"
            {
                lIndexTarget += (NBITS * lSourceSize);
            }
                
            // Перемещаем данные
            prgbBitData[lIndexTarget] = (prgbBitData[lIndexSource]\
                ^ Getbit(prgbPasswordBuffer[i], nbit2));

            nbit2++;

            if (nbit2 >= NBITS)
            {
                nbit2 = 0;
            }
        }
    }

    // "Перекидываем" указатель на один из двух логических подмассивов
    // в массиве prgbBitData
    bitDataPosition ^= (char)0x01;
}
Пример #5
0
 int SgTransmmit::RY_3KwPdmData(unsigned char *data, DevMonitorDataPtr data_ptr, int nDataLen, int &runstate)
 {
     if(data[2]!=0x10)
         return RE_CMDACK;
     DataInfo dainfo;
     int nbase=4;
     char data1=AsciiToInt(data[nbase+6]);
     char data2=AsciiToInt(data[nbase+7]);
     char data3=AsciiToInt(data[nbase+8]);
     char data4=AsciiToInt(data[nbase+9]);
     char data5=AsciiToInt(data[nbase+10]);
     char data6=AsciiToInt(data[nbase+11]);
     dainfo.bType = false;
     dainfo.fValue = (((data2&0x0F)<<4)|(data1&0x0F))*0.01+(((((((data6&0x0F)<<4)|(data5&0x0F))<<4)|(data4&0x0F))<<4)|(data3&0x0F));
     data_ptr->mValues[0] = dainfo;
     data1=AsciiToInt(data[nbase+12]);
     data2=AsciiToInt(data[nbase+13]);
     data3=AsciiToInt(data[nbase+14]);
     data4=AsciiToInt(data[nbase+15]);
     data5=AsciiToInt(data[nbase+16]);
     data6=AsciiToInt(data[nbase+17]);
     dainfo.fValue = (((data2&0x0F)<<4)|(data1&0x0F))*0.01+(((((((data6&0x0F)<<4)|(data5&0x0F))<<4)|(data4&0x0F))<<4)|(data3&0x0F));
     data_ptr->mValues[1] = dainfo;
     if(data_ptr->mValues[0].fValue>data_ptr->mValues[1].fValue)
     {
         dainfo.fValue = sqrt((data_ptr->mValues[0].fValue+data_ptr->mValues[1].fValue)/(data_ptr->mValues[0].fValue-data_ptr->mValues[1].fValue));
     }
     else{
         dainfo.fValue = 0;
     }
     data_ptr->mValues[2] = dainfo;
     data1=AsciiToInt(data[nbase]);
     data2=AsciiToInt(data[nbase+1]);
     data3=AsciiToInt(data[nbase+2]);
     data4=AsciiToInt(data[nbase+3]);
     data5=AsciiToInt(data[nbase+4]);
     data6=AsciiToInt(data[nbase+5]);
     dainfo.fValue = (((data2&0x0F)<<4)|(data1&0x0F))*0.01+(((((((data6&0x0F)<<4)|(data5&0x0F))<<4)|(data4&0x0F))<<4)|(data3&0x0F));
     data_ptr->mValues[3] = dainfo;
     for(int i=0;i<5;++i)
     {
         data1=AsciiToInt(data[nbase+18+6*i]);
         data2=AsciiToInt(data[nbase+19+6*i]);
         data3=AsciiToInt(data[nbase+20+6*i]);
         data4=AsciiToInt(data[nbase+21+6*i]);
         data5=AsciiToInt(data[nbase+22+6*i]);
         data6=AsciiToInt(data[nbase+23+6*i]);
         dainfo.fValue = (((data2&0x0F)<<4)|(data1&0x0F))*0.01+(((((((data6&0x0F)<<4)|(data5&0x0F))<<4)|(data4&0x0F))<<4)|(data3&0x0F));
         data_ptr->mValues[4+i] = dainfo;
     }
     for(int j=0;j<2;++j)
     {
         data3=AsciiToInt(data[nbase+48+4*j]);
         data4=AsciiToInt(data[nbase+49+4*j]);
         data5=AsciiToInt(data[nbase+50+4*j]);
         data6=AsciiToInt(data[nbase+51+4*j]);
         dainfo.fValue = ((((((data6&0x0F)<<4)|(data5&0x0F))<<4)|(data4&0x0F))<<4)|(data3&0x0F);
         data_ptr->mValues[9+j] = dainfo;
     }
     dainfo.bType = true;
     for(int k=0;k<3;++k)
     {
         data1=AsciiToInt(data[nbase+56+k]);
         for(int i=0;i<4;++i)
         {
             dainfo.fValue = (Getbit(data1,i)==0 ? 1:0);
             data_ptr->mValues[11+k*4+i] = dainfo;
         }
     }
     return RE_SUCCESS;
 }