Шифрование в Arduino

d19beg
Offline
Зарегистрирован: 25.01.2020

Всем привет, ардуинщики!

Скажите, есть ли проекты по анализу блочных видов шифрования с использованием Arduino? (Модель IoT)

rkit
Offline
Зарегистрирован: 23.11.2016

Нет такой модели. И нет никакой причины, кроме мазохизма, анализировать шифры на слабом железе.

d19beg
Offline
Зарегистрирован: 25.01.2020

А на Raspberry?

d19beg
Offline
Зарегистрирован: 25.01.2020

Анализировать с точки зрения переданного блока данных за определенное время или потребляемой электроэнергии

rkit
Offline
Зарегистрирован: 23.11.2016

d19beg пишет:

А на Raspberry?

Мне повторить? Нет никакой причины, кроме мазохизма, анализировать шифры на слабом железе.

 

d19beg пишет:

Анализировать с точки зрения переданного блока данных за определенное время или потребляемой электроэнергии

Что это значит? Если мне надо узнать, сколько данных передается за определенное время, я беру калькулятор и считаю. Если мне надо измерить электричество, я беру ваттметр и измеряю. Никаких ПРОЕКТОВ тут не надо. 

sadman41
Offline
Зарегистрирован: 19.10.2016

d19beg пишет:

Анализировать с точки зрения переданного блока данных за определенное время или потребляемой электроэнергии

Все слова понял, смысла фразы - нет. 

Что с чем сравнивается и по каким критериям оценивается?

 

d19beg
Offline
Зарегистрирован: 25.01.2020

Я имею ввиду по примеру данной статьи: https://pdfs.semanticscholar.org/c73f/c9be94f2a70b07fbcfa31649179fb680f5b9.pdf?_ga=2.217363606.1276740591.1579956298-1625339107.1579956298

..Правда в ней используется Raspberry.

sadman41
Offline
Зарегистрирован: 19.10.2016

В "стандартной ардуине" с МК типа ATMega328 нет никаких кластеров ядер, подключающихся при необходимости крипто-сопроцессоров и "коробочных" режимов понижения частот при бездействии. Она всегда молотит с практически одним и тем же энергопотреблением. Так что единственная оценка тут - длительность процедуры шифровки/дешифровки помноженная на константу в микроваттах (или в чём хотите измерять затраты).

rkit
Offline
Зарегистрирован: 23.11.2016

 Никакого анализа на малине там не происходит. Это просто подопытный образец. Всё, что там происходит - измерения ваттметром и секундомером.

d19beg
Offline
Зарегистрирован: 25.01.2020

Короче сравнение разных алгоритмов шифрования на Arduino дело лишнее.

Это всё для диплома я спрашиваю. Может что реализовать можно было бы.

b707
Offline
Зарегистрирован: 26.05.2017

d19beg пишет:

Это всё для диплома я спрашиваю. Может что реализовать можно было бы.

...похоже диплом - это первый момент, когда дипломник начинает интересоваться. что ж он такое изучал несколько лет.

d19beg
Offline
Зарегистрирован: 25.01.2020

Я сетевик(инженер проводных каналов связи), по приборостроению и микроконтроллерам у нас мало было дисциплин, к сожалению.

rkit
Offline
Зарегистрирован: 23.11.2016

Нет, не лишнее. Если  хочется написать об этом диплом, то это вполне нормально. Только вот не надо сравнение  алгоритмов называть анализом шифров. И не надо ждать, что будет что-то готовое на блюдечке.

d19beg
Offline
Зарегистрирован: 25.01.2020

Да мне готовое не надо. Главное навести на по-настоящему нужную проблему. И разобрать варианты решения этой проблемы. В данном случае, не зная толком микроконтроллеры Arduino, спрашиваю у Вас, знающих. Реально ли провести, например, эксперимент с двумя ардуинками с модулями приемо-передачи и сравнить параметры работы нескольких алгоритмов шифрования. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Эксперимент провести - реально, но есть ли в этом смысл - вопрос на миллион.

rkit
Offline
Зарегистрирован: 23.11.2016

По-настоящему нужной проблемы тут нет, ибо никто не делает на ардуино настолько масштабные вещи, чтобы микроватты разницы что-то решали. С другой стороны, ожидать, что диплом прям реально позитивный вклад в мир внесет - наивно.

d19beg
Offline
Зарегистрирован: 25.01.2020

Посеяли тоску и сомнения:D

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

d19beg пишет:

Посеяли тоску и сомнения:D

Станете инженером, будьте готовы к бумажной работе. Диплом это просто подготовка к будущей работе. Так что бред в дипломе , и бред в отчете это ответ на вопрос что вы делали в отведенное на работу время.

d19beg
Offline
Зарегистрирован: 25.01.2020

Подскажите, можно ли подключить к микроконтроллеру модуль приемо-передачи и работать с уровнем шифрованием или логика шифрования канала между двумя модулями жестко прошита?

sadman41
Offline
Зарегистрирован: 19.10.2016

Вопросы у Вас, что не знаешь как ответить
... И так можно и сяк. "Модулей" для ардуино >1 разновидности.

alex_r61
Offline
Зарегистрирован: 20.06.2012

d19beg пишет:

Подскажите, можно ли подключить к микроконтроллеру модуль приемо-передачи и работать с уровнем шифрованием или логика шифрования канала между двумя модулями жестко прошита?

 CC430 5-ой серии в помощь. Там всё в одном.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

у Core i9  встроенный AES.

rkit
Offline
Зарегистрирован: 23.11.2016

Даже если в модуле уже есть шифрование, то ничто не мешает зашифровать еще раз в мк.

d19beg
Offline
Зарегистрирован: 25.01.2020

На Raspberry Pi 3 лучше реализовывать?

nik182
Offline
Зарегистрирован: 04.05.2015

UM1924. User manual. STM32 crypto library. ST, 2015

Почитайте по английски. Сертифицированные библиотеки. На программном и аппаратном уровне. Для МК. 

d19beg
Offline
Зарегистрирован: 25.01.2020

Объясните пожалуйста, на каком это уровне идёт шифрование? Шифруются передача данных внутри платы? Или в дальнейшем для передачи по разным каналам?

Что почитать более фундаментального, чтобы понять на каком уровне всё это происходит?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

d19beg пишет:

Что почитать более фундаментального, чтобы понять на каком уровне всё это происходит?

Для начала, закончить ВУЗ по спицальности "Защита информации"

d19beg
Offline
Зарегистрирован: 25.01.2020

Если закончил по специальности " Системы связи", то всё плохо?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

тогда у тебя был минимум семестр по теории защиты передаваемых данных. 

rkit
Offline
Зарегистрирован: 23.11.2016

d19beg пишет:

Объясните пожалуйста, на каком это уровне идёт шифрование? Шифруются передача данных внутри платы? Или в дальнейшем для передачи по разным каналам?

Что почитать более фундаментального, чтобы понять на каком уровне всё это происходит?

Как сделаешь - так и будет. Никакого стандарта нет.

d19beg
Offline
Зарегистрирован: 25.01.2020

Код загрузили - и смотрит за какое время передает на другое устройство?

Logik
Offline
Зарегистрирован: 05.08.2014

Причём тут передаёт. Смотри время, затраченое на шифрование и/или дешифровку блока данных. Передача не показатель, там от канала связи ещё будет зависть. Вообще мысль взять криптолиб и скомпилировать DES для ардуины периодически посещает меня. Даже знаю зачем - получить прозрачную, без закладок, бекдоров и др. уязвимостей криптосистему обмена сообщениями. Тока незнаю зачем оно лично мне:-)  Думаю на des ресурсов хватит. А значить и на 3des. Ассиметричные алгоритмы кроме генерации ключа тоже возможно потянет. Так что пробуйте.

Logik
Offline
Зарегистрирован: 05.08.2014

не вынесла душа поэта. Попробовал. Источник вдохновения - http://www.proteus2001.narod.ru/crypt/index.html 


typedef unsigned char byte;
typedef unsigned int  uint;

class DES{
  void inital_key(const char key[64],char ekey[16][48],bool is_crypt);  //!< подготовка ключа
  void round_(char l[32],char r[32],const char ekey[48]);          //!< раунд шифра
  void permute(const char *in,char *out,const int table,uint size);   //!< табличная подстановка
  void lshift(char [28],uint step);                   //!< циклический сдвиг массива
  void xor_(const char *in1,const char *in2,char *out,uint size);      //!< xor двух массивов
  void work(const char in[64],char out[64],const char key[64],bool is_crypt);
  void str_to_key(const byte str[7],byte key[8]);             //!< конвертируем 7 байтный ключ в 8
public:
  void crypt_block(const byte in[8],byte out[8],const byte key[8],bool is_crypt);
  void lm_hash(const byte in[7],byte out[8]);
};


namespace _DES{
const byte PROGMEM perm1[56] = {
    56, 48, 40, 32, 24, 16,  8,
     0, 57, 49, 41, 33, 25, 17,
     9,  1, 58, 50, 42, 34, 26,
    18, 10,  2, 59, 51, 43, 35,
    62, 54, 46, 38, 30, 22, 14,
     6, 61, 53, 45, 37, 29, 21,
    13,  5, 60, 52, 44, 36, 28,
    20, 12,  4, 27, 19, 11,  3
};

const byte PROGMEM perm2[48] = {
    13, 16, 10, 23,  0,  4,
     2, 27, 14,  5, 20,  9,
    22, 18, 11,  3, 25,  7,
    15,  6, 26, 19, 12,  1,
    40, 51, 30, 36, 46, 54,
    29, 39, 50, 44, 32, 47,
    43, 48, 38, 55, 33, 52,
    45, 41, 49, 35, 28, 31
};

const byte PROGMEM perm3[64] = {
    57, 49, 41, 33, 25, 17,  9,  1,
    59, 51, 43, 35, 27, 19, 11,  3,
    61, 53, 45, 37, 29, 21, 13,  5,
    63, 55, 47, 39, 31, 23, 15,  7,
    56, 48, 40, 32, 24, 16,  8,  0,
    58, 50, 42, 34, 26, 18, 10,  2,
    60, 52, 44, 36, 28, 20, 12,  4,
    62, 54, 46, 38, 30, 22, 14,  6
};


const byte PROGMEM perm4[48] = {   
    31,  0,  1,  2,  3,  4,
     3,  4,  5,  6,  7,  8,
     7,  8,  9, 10, 11, 12,
    11, 12, 13, 14, 15, 16,
    15, 16, 17, 18, 19, 20,
    19, 20, 21, 22, 23, 24,
    23, 24, 25, 26, 27, 28,
    27, 28, 29, 30, 31,  0
};

const byte PROGMEM perm5[32] = {      
    15,  6, 19, 20,
    28, 11, 27, 16,
     0, 14, 22, 25,
     4, 17, 30,  9,
     1,  7, 23, 13,
    31, 26,  2,  8,
    18, 12, 29,  5,
    21, 10,  3, 24
};


const byte PROGMEM perm6[64] ={ // изменено!
    7,  39, 15, 47, 23, 55, 31, 63,
    6,  38, 14, 46, 22, 54, 30, 62,
    5,  37, 13, 45, 21, 53, 29, 61,
    4,  36, 12, 44, 20, 52, 28, 60,
    3,  35, 11, 43, 19, 51, 27, 59,
    2,  34, 10, 42, 18, 50, 26, 58,
    1,  33,  9, 41, 17, 49, 25, 57,
    0,  32,  8, 40, 16, 48, 24, 56
};


const byte sc[16] = {1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1};

const byte PROGMEM sbox[8][4][16] = {
  {{14,  4, 13,  1,  2, 15, 11,  8,  3, 10,  6, 12,  5,  9,  0,  7},
  {0, 15,  7,  4, 14,  2, 13,  1, 10,  6, 12, 11,  9,  5,  3,  8},
   {4,  1, 14,  8, 13,  6,  2, 11, 15, 12,  9,  7,  3, 10,  5,  0},
   {15, 12,  8,  2,  4,  9,  1,  7,  5, 11,  3, 14, 10,  0,  6, 13}},

  {{15,  1,  8, 14,  6, 11,  3,  4,  9,  7,  2, 13, 12,  0,  5, 10},
   {3, 13,  4,  7, 15,  2,  8, 14, 12,  0,  1, 10,  6,  9, 11,  5},
   {0, 14,  7, 11, 10,  4, 13,  1,  5,  8, 12,  6,  9,  3,  2, 15},
   {13,  8, 10,  1,  3, 15,  4,  2, 11,  6,  7, 12,  0,  5, 14,  9}},

  {{10,  0,  9, 14,  6,  3, 15,  5,  1, 13, 12,  7, 11,  4,  2,  8},
   {13,  7,  0,  9,  3,  4,  6, 10,  2,  8,  5, 14, 12, 11, 15,  1},
   {13,  6,  4,  9,  8, 15,  3,  0, 11,  1,  2, 12,  5, 10, 14,  7},
   {1, 10, 13,  0,  6,  9,  8,  7,  4, 15, 14,  3, 11,  5,  2, 12}},

  {{7, 13, 14,  3,  0,  6,  9, 10,  1,  2,  8,  5, 11, 12,  4, 15},
   {13,  8, 11,  5,  6, 15,  0,  3,  4,  7,  2, 12,  1, 10, 14,  9},
   {10,  6,  9,  0, 12, 11,  7, 13, 15,  1,  3, 14,  5,  2,  8,  4},
   {3, 15,  0,  6, 10,  1, 13,  8,  9,  4,  5, 11, 12,  7,  2, 14}},

  {{2, 12,  4,  1,  7, 10, 11,  6,  8,  5,  3, 15, 13,  0, 14,  9},
   {14, 11,  2, 12,  4,  7, 13,  1,  5,  0, 15, 10,  3,  9,  8,  6},
   {4,  2,  1, 11, 10, 13,  7,  8, 15,  9, 12,  5,  6,  3,  0, 14},
   {11,  8, 12,  7,  1, 14,  2, 13,  6, 15,  0,  9, 10,  4,  5,  3}},

  {{12,  1, 10, 15,  9,  2,  6,  8,  0, 13,  3,  4, 14,  7,  5, 11},
   {10, 15,  4,  2,  7, 12,  9,  5,  6,  1, 13, 14,  0, 11,  3,  8},
   {9, 14, 15,  5,  2,  8, 12,  3,  7,  0,  4, 10,  1, 13, 11,  6},
   {4,  3,  2, 12,  9,  5, 15, 10, 11, 14,  1,  7,  6,  0,  8, 13}},

  {{4, 11,  2, 14, 15,  0,  8, 13,  3, 12,  9,  7,  5, 10,  6,  1},
   {13,  0, 11,  7,  4,  9,  1, 10, 14,  3,  5, 12,  2, 15,  8,  6},
   {1,  4, 11, 13, 12,  3,  7, 14, 10, 15,  6,  8,  0,  5,  9,  2},
   {6, 11, 13,  8,  1,  4, 10,  7,  9,  5,  0, 15, 14,  2,  3, 12}},

  {{13,  2,  8,  4,  6, 15, 11,  1, 10,  9,  3, 14,  5,  0, 12,  7},
   {1, 15, 13,  8, 10,  3,  7,  4, 12,  5,  6, 11,  0, 14,  9,  2},
   {7, 11,  4,  1,  9, 12, 14,  2,  0,  6, 10, 13, 15,  3,  5,  8},
   {2,  1, 14,  7,  4, 10,  8, 13, 15, 12,  9,  0,  3,  5,  6, 11}}};
}


void DES::permute(const char *in,char *out,const int table,uint size)
{
  for(uint n=0; n<size; n++) out[n]=in[pgm_read_byte(table+n)];
}


//! \param step размер сдвига
void DES::lshift(char array[28],uint step)
{
  char buff[28];  // конешно надо без лишнего буфера (всё только для наглядности)
  for(uint n=0; n<28; n++) buff[n]=array[(n+step)%28];
  memcpy(array,buff,28);
}


void DES::xor_(const char *in1,const char *in2,char *out,uint size)
{
  for(uint n=0; n<size; n++) out[n]=in1[n]^in2[n];
}


// Triple DES (3DES) будет отличаться от DES, только процерудой подготовки ключа и числом раундов
void DES::inital_key(const char key[64],char ekey[16][48],bool is_crypt)
{
  union{
    char pkey[56];
    struct{char l[28],r[28];};
  } a;
  permute(key,a.pkey,_DES::perm1,56); // готовим ключ
  for(uint n=0; n<16; n++) {
    lshift(a.l,_DES::sc[n]);
    lshift(a.r,_DES::sc[n]);
    permute(a.pkey,ekey[is_crypt?n:15-n],_DES::perm2,48); 
  }
}


void DES::round_(char l[32],char r[32],const char ekey[48])
{
  uint x,y;
  char erk[48],b[8][6],cb[32],pcb[32];
  permute(r,erk,_DES::perm4,48);
  xor_(erk,ekey,erk,48);
  for(y=0; y<8; y++) for(x=0; x<6; x++) b[y][x]=erk[y*6+x];
  for(y=0; y<8; y++) {
    uint i=(b[y][0]<<1)| b[y][5];
    uint j=(b[y][1]<<3)|(b[y][2]<<2)|(b[y][3]<<1)|b[y][4]; 
    for(x=0; x<4; x++) b[y][x]=(/*_DES::sbox[y][i][j]*/ pgm_read_byte((int)_DES::sbox+j+i*16+y*16*4) & (1<<(3-x)))?1:0; 
  }
  for(y=0; y<8; y++) for(x=0; x<4; x++) cb[y*4+x]=b[y][x];
  permute(cb,pcb,_DES::perm5,32);
  xor_(l,pcb,l,32);
}


void DES::work(const char in[64],char out[64],const char key[64],bool is_crypt)
{
  char ekey[16][48];          // подготовленный ключ
  union{                // левый и правый блок (сети Фейстеля)
    char pin[64];
    struct{char l[32],r[32];};
  } a;
  inital_key(key,ekey,is_crypt);
  permute(in,a.pin,_DES::perm3,64);
  for(uint n=0; n<16;) round_(a.l,a.r,ekey[n++]),round_(a.r,a.l,ekey[n++]);
  // после последнего раунда блоки l,r надо поменять местами
  // я не стал... просто поменял _DES::perm6, чтобы она это учитывала
  permute(a.pin,out,_DES::perm6,64);
}


void DES::str_to_key(const byte str[7],byte key[8])
{
  for(uint n=1; n<=6; n++) key[n]=(str[n-1]<<(8-n))|(str[n]>>n);
  key[0]=str[0];
  key[7]=str[6]<<1;
}


void DES::crypt_block(const byte in[8],byte out[8],const byte key[7],bool is_crypt)
{
  uint n;
  byte keym[8];
  char outb[64],inb[64],keyb[64];
  str_to_key(key,keym);
  for(n=0; n<64; n++) {
    inb [n]=!!(in  [n/8]&(0x80>>(n%8)));
    keyb[n]=!!(keym[n/8]&(0x80>>(n%8)));
    //outb[n]=0;
  }
  work(inb,outb,keyb,is_crypt);
  memset(out,0,8);
  for(n=0; n<64; n++) if(outb[n]) out[n/8]|=(0x80>>(n%8));
}

void DES::lm_hash(const byte in[8],byte out[8])
{
  crypt_block((byte*)"KGS!@#$%",out,in,true);
}


void setup() {
  // put your setup code here, to run once:

 Serial.begin(115200);
}

  byte res1[8],res2[8];
  byte dataDES[]="qwertyop";
  byte pass[]="12345678";

  DES des;

void loop() {
  // put your main code here, to run repeatedly:
  int t;
  t=micros();

  des.crypt_block(dataDES,res1,pass,true);
  Serial.println((int)micros()-t);
  t=micros();
  des.crypt_block(res1,res2,pass,false);
  Serial.println((int)micros()-t);

 //{0x9F,0x4B,0x05,0xE7,0xA3,0xCE,0x4C,0xAD};
  for(uint8_t a=0;a<8;a++){Serial.print( res1[a], HEX);  Serial.print( " ");}
  Serial.println();
  for(uint8_t a=0;a<8;a++){Serial.print( (char)res2[a]);  Serial.print( " ");}
  Serial.println();
  delay(100);
}

Немного притер, в прогмем вынес.

Скетч использует 4336 байт (14%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 240 байт (11%) динамической памяти, оставляя 1808 байт для локальных переменных. Максимум: 2048 байт.
 
Но стек нагружает прилично, под килобайт наверно.
DES для блока около 20мсек.
 
14:54:07.227 -> 9F 4B 5 E7 A3 CE 4C AD 
14:54:07.227 -> q w e r t y o p 
14:54:07.328 -> 19996
14:54:07.361 -> 20036
 

 

d19beg
Offline
Зарегистрирован: 25.01.2020

Ну а на Raspberry такое можно сделать, как думаете?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

d19beg пишет:

Ну а на Raspberry такое можно сделать, как думаете?

Можно.

d19beg
Offline
Зарегистрирован: 25.01.2020

Кто по Расбери шарит, подскажите, это всё в командной строке ОС Linux делается?

sadman41
Offline
Зарегистрирован: 19.10.2016
RG22EM
Offline
Зарегистрирован: 27.08.2016

sadman41 пишет:

Так, например: https://wiki.openssl.org/index.php/Command_Line_Utilities

а ты на расбери опенссл с гост 2012 установил?

sadman41
Offline
Зарегистрирован: 19.10.2016

RG22EM пишет:

sadman41 пишет:

Так, например: https://wiki.openssl.org/index.php/Command_Line_Utilities

а ты на расбери опенссл с гост 2012 установил?

Вы что, из одного гнезда с ua6em?

d19beg
Offline
Зарегистрирован: 25.01.2020

То есть пишу код на распбери клиенте, который зашифрует данные передаваемые от неё. После чего передаю по wi-fi каналу, а далее расшифровываю данные, предварительно установив код расшифровки на сервере-шлюзе. Так?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Какие-то варнинги при компиляции:
 

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino: In member function 'void DES::inital_key(const char*, char (*)[48], bool)':

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:161:36: warning: invalid conversion from 'const byte* {aka const unsigned char*}' to 'int' [-fpermissive]

   permute(key,a.pkey,_DES::perm1,56); // готовим ключ

                                    ^

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:133:6: note:   initializing argument 3 of 'void DES::permute(const char*, char*, int, uint)'

 void DES::permute(const char *in,char *out,const int table,uint size)

      ^~~

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:165:56: warning: invalid conversion from 'const byte* {aka const unsigned char*}' to 'int' [-fpermissive]

     permute(a.pkey,ekey[is_crypt?n:15-n],_DES::perm2,48);

                                                        ^

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:133:6: note:   initializing argument 3 of 'void DES::permute(const char*, char*, int, uint)'

 void DES::permute(const char *in,char *out,const int table,uint size)

      ^~~

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino: In member function 'void DES::round_(char*, char*, const char*)':

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:174:31: warning: invalid conversion from 'const byte* {aka const unsigned char*}' to 'int' [-fpermissive]

   permute(r,erk,_DES::perm4,48);

                               ^

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:133:6: note:   initializing argument 3 of 'void DES::permute(const char*, char*, int, uint)'

 void DES::permute(const char *in,char *out,const int table,uint size)

      ^~~

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:183:32: warning: invalid conversion from 'const byte* {aka const unsigned char*}' to 'int' [-fpermissive]

   permute(cb,pcb,_DES::perm5,32);

                                ^

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:133:6: note:   initializing argument 3 of 'void DES::permute(const char*, char*, int, uint)'

 void DES::permute(const char *in,char *out,const int table,uint size)

      ^~~

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino: In member function 'void DES::work(const char*, char*, const char*, bool)':

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:196:34: warning: invalid conversion from 'const byte* {aka const unsigned char*}' to 'int' [-fpermissive]

   permute(in,a.pin,_DES::perm3,64);

                                  ^

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:133:6: note:   initializing argument 3 of 'void DES::permute(const char*, char*, int, uint)'

 void DES::permute(const char *in,char *out,const int table,uint size)

      ^~~

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:200:35: warning: invalid conversion from 'const byte* {aka const unsigned char*}' to 'int' [-fpermissive]

   permute(a.pin,out,_DES::perm6,64);

                                   ^

D:\ARDUINO\arduino-1.8.9-NEW\portable\sketchbook\AVR\DES_V001\DES_V001.ino:133:6: note:   initializing argument 3 of 'void DES::permute(const char*, char*, int, uint)'

 void DES::permute(const char *in,char *out,const int table,uint size)

      ^~~

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

а AES не подойдет? когда то находил исходники. не зависящие от платформы, в любой код C можно было добавить.
саму ссылку не найду, файлы остались, могу на почту кинуть.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andycat пишет:

а AES не подойдет? когда то находил исходники. не зависящие от платформы, в любой код C можно было добавить.
саму ссылку не найду, файлы остались, могу на почту кинуть.

я решил задачу на уровне ХЭШей формируемых из данных и некоторого количества закрытых ключей в рандомном использовании

PS если найдёшь исходники работающие на ESP8266 буду признателен

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

ua6em пишет:

andycat пишет:

а AES не подойдет? когда то находил исходники. не зависящие от платформы, в любой код C можно было добавить.
саму ссылку не найду, файлы остались, могу на почту кинуть.

я решил задачу на уровне ХЭШей формируемых из данных и некоторого количества закрытых ключей в рандомном использовании

PS если найдёшь исходники работающие на ESP8266 буду признателен

Дык aes на любом МК работает. Почта куда отправить? Или что поискать?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

На работе все, завтра скину.

Logik
Offline
Зарегистрирован: 05.08.2014

//Какие-то варнинги при компиляции:

Варнингов спужался ))) Это ж не раздел для новичков!

Забей на них. Это из за несоответствия знакового и беззнакового char при включенном -fpermissive. Если спать не дает - допиши unsigned в третий параметр permute(.

 

ПС. Под рукой сейчас  lgt8f328p. Таки да, он побыстрей немного. При всем том же

11:24:47.008 -> 9F 4B 5 E7 A3 CE 4C AD 
11:24:47.008 -> q w e r t y o p 
11:24:47.104 -> 18352
11:24:47.149 -> 18376
 
Около 8% производительней.
 
ППС. ua6em, точно не пробуй lgt8f328p. Там стоко варнингов прет из глубин адона ))))
 
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

 
ППС. ua6em, точно не пробуй lgt8f328p. Там стоко варнингов прет из глубин адона ))))
 

мне сиё надобно только под ESP

Logik
Offline
Зарегистрирован: 05.08.2014

И что, не работает под ESP? Там конечно PROGMEM не канает, но в общем должно.