亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hal_aes.c

?? 非常全的nrf2401設計資料
?? C
字號:
/* Copyright (c) 2008 Nordic Semiconductor. All Rights Reserved.
 *
 * The information contained herein is confidential property of Nordic
 * Semiconductor. The use, copying, transfer or disclosure of such information
 * is prohibited except by express written agreement with Nordic Semiconductor.
 */

/** @file hal_aes.c
 * This file contains functions for using the AES crytographic in software 
 * utilizing the hardware support provided in nRF24LE1. This version only 
 * support ECB encryption mode of operation.
 *
 * @author Ivar Conradi OEsthus
 */


#include "hal_aes.h"
#include <stdint.h>
#include <Nordic\reg24le1.h>

/*----------------------- AES Parameters -------------------------------------*/
static uint8_t xdata cipher_key[16];    //AES key

//These should be placed in fast RAM
static uint8_t data aes_state[16];      //AES State
static uint8_t pdata aes_round_key[16]; //AES Round Key

/*----------------------- AES Encryption Functions ---------------------------*/
void mix_columns_hw(void);
void add_sub_shift(void);
void add_key(void);
void aes_set_key(uint8_t * key_bytes);
void key_upgrade(uint8_t round);
void aes_encrypt(uint8_t * dest_buf, uint8_t * src_buf);

/*----------------------- AES STATIC values ----------------------------------*/
static uint8_t code s_box[256] = {
 99, 124, 119, 123, 242, 107, 111, 197,  48,   1, 103,  43, 254, 215, 171, 118,
202, 130, 201, 125, 250,  89,  71, 240, 173, 212, 162, 175, 156, 164, 114, 192,
183, 253, 147,  38,  54,  63, 247, 204,  52, 165, 229, 241, 113, 216,  49,  21,
  4, 199,  35, 195,  24, 150,   5, 154,   7,  18, 128, 226, 235,  39, 178, 117,
  9, 131,  44,  26,  27, 110,  90, 160,  82,  59, 214, 179,  41, 227,  47, 132,
 83, 209,   0, 237,  32, 252, 177,  91, 106, 203, 190,  57,  74,  76,  88, 207,
208, 239, 170, 251,  67,  77,  51, 133,  69, 249,   2, 127,  80,  60, 159, 168,
 81, 163,  64, 143, 146, 157,  56, 245, 188, 182, 218,  33,  16, 255, 243, 210,
205,  12,  19, 236,  95, 151,  68,  23, 196, 167, 126,  61, 100,  93,  25, 115,
 96, 129,  79, 220,  34,  42, 144, 136,  70, 238, 184,  20, 222,  94,  11, 219,
224,  50,  58,  10,  73,   6,  36,  92, 194, 211, 172,  98, 145, 149, 228, 121,
231, 200,  55, 109, 141, 213,  78, 169, 108,  86, 244, 234, 101, 122, 174,   8,
186, 120,  37,  46,  28, 166, 180, 198, 232, 221, 116,  31,  75, 189, 139, 138,
112,  62, 181, 102,  72,   3, 246,  14,  97,  53,  87, 185, 134, 193,  29, 158,
225, 248, 152,  17, 105, 217, 142, 148, 155,  30, 135, 233, 206,  85,  40, 223,
140, 161, 137,  13, 191, 230,  66, 104,  65, 153,  45,  15, 176,  84, 187,  22,
};

static uint8_t code rcon[]={
0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36};

/*----------------------- AES API --------------------------------------------*/
void hal_aes_setup(bool decrypt, aes_modes_t mode, uint8_t *keyin, uint8_t *ivin)
{
	aes_set_key(keyin);

	// Not used in LE1, included to prevent compile-warnings------ |
	decrypt = decrypt; 	                                        // |
	mode = mode;                                                // |
	ivin = ivin;                                                // |
	//-------------------------------------------------------------|
}

void hal_aes_crypt(uint8_t * dest_buf,uint8_t * src_buf)
{
  uint8_t a;

	for(a=0;a<16;a++)
	{
		aes_state[a] = src_buf[a];
	}

  //Start
  CCPDATIB = 0x02;  //Set co-prosessor the GF(2^8)*2 (used in mix-colums)
  for (a=0;a<9;a++)
  {
    add_sub_shift();
    mix_columns_hw();
    key_upgrade(a);
  }

  //FINAL	round
  add_sub_shift();
  key_upgrade(9);
  add_key();

  //Clean up
	for(a=0;a<16;a++)
	{
		aes_round_key[a]=cipher_key[a]; //Write back cipher-key
		dest_buf[a] = aes_state[a];     //Write out encrypted result
	}
}
/*----------------------- Private AES Encryption Functions -------------------*/
void aes_set_key(uint8_t * key_bytes)
{
  uint8_t k;
  for (k=0;k<16;k++)
  {
    cipher_key[k]=aes_round_key[k]=key_bytes[k];
  }
}

void add_key(void)
{
  aes_state[0]^=aes_round_key[0];
  aes_state[1]^=aes_round_key[1];
  aes_state[2]^=aes_round_key[2];
  aes_state[3]^=aes_round_key[3];
  aes_state[4]^=aes_round_key[4];
  aes_state[5]^=aes_round_key[5];
  aes_state[6]^=aes_round_key[6];
  aes_state[7]^=aes_round_key[7];
  aes_state[8]^=aes_round_key[8];
  aes_state[9]^=aes_round_key[9];
  aes_state[10]^=aes_round_key[10];
  aes_state[11]^=aes_round_key[11];
  aes_state[12]^=aes_round_key[12];
  aes_state[13]^=aes_round_key[13];
  aes_state[14]^=aes_round_key[14];
  aes_state[15]^=aes_round_key[15];
}

void key_upgrade(uint8_t round)
{
  aes_round_key[0]=s_box[aes_round_key[13]]^aes_round_key[0]^rcon[round+1];
  aes_round_key[1]=s_box[aes_round_key[14]]^aes_round_key[1];
  aes_round_key[2]=s_box[aes_round_key[15]]^aes_round_key[2];
  aes_round_key[3]=s_box[aes_round_key[12]]^aes_round_key[3];

  aes_round_key[4]=aes_round_key[0]^aes_round_key[4];
  aes_round_key[5]=aes_round_key[1]^aes_round_key[5];
  aes_round_key[6]=aes_round_key[2]^aes_round_key[6];
  aes_round_key[7]=aes_round_key[3]^aes_round_key[7];

  aes_round_key[8]=aes_round_key[4]^aes_round_key[8];
  aes_round_key[9]=aes_round_key[5]^aes_round_key[9];
  aes_round_key[10]=aes_round_key[6]^aes_round_key[10];
  aes_round_key[11]=aes_round_key[7]^aes_round_key[11];

  aes_round_key[12]=aes_round_key[8]^aes_round_key[12];
  aes_round_key[13]=aes_round_key[9]^aes_round_key[13];
  aes_round_key[14]=aes_round_key[10]^aes_round_key[14];
  aes_round_key[15]=aes_round_key[11]^aes_round_key[15];
}

void add_sub_shift()
{
  uint8_t row[2];

  aes_state[0]=s_box[aes_state[0]^aes_round_key[0]];
  aes_state[4]=s_box[aes_state[4]^aes_round_key[4]];
  aes_state[8]=s_box[aes_state[8]^aes_round_key[8]];
  aes_state[12]=s_box[aes_state[12]^aes_round_key[12]];

  row[0]=s_box[aes_state[1]^aes_round_key[1]];
  aes_state[1]=s_box[aes_state[5]^aes_round_key[5]];
  aes_state[5]=s_box[aes_state[9]^aes_round_key[9]];
  aes_state[9]=s_box[aes_state[13]^aes_round_key[13]];
  aes_state[13]=row[0];

  row[0]=s_box[aes_state[2]^aes_round_key[2]];
  row[1]=s_box[aes_state[6]^aes_round_key[6]];
  aes_state[2]=s_box[aes_state[10]^aes_round_key[10]];
  aes_state[6]=s_box[aes_state[14]^aes_round_key[14]];
  aes_state[10]=row[0];
  aes_state[14]=row[1];

  row[0]=s_box[aes_state[15]^aes_round_key[15]];
  aes_state[15]=s_box[aes_state[11]^aes_round_key[11]];
  aes_state[11]=s_box[aes_state[7]^aes_round_key[7]];
  aes_state[7]=s_box[aes_state[3]^aes_round_key[3]];
  aes_state[3]=row[0];
}

void mix_columns_hw(void)
{
  uint8_t col,r,tmp;
  /*
  This function operates on the columns of the state. Each column is subject to the
  following transform (in vector and matrix notation):
  (b0)   (2 3 1 1)   (a0)
  (b1) = (1 2 3 1) * (a1)
  (b2)   (1 1 2 3)   (a2)
  (b3)   (3 1 1 2)   (a3)
  Here the vector a is a column of the state before the mix columns operation, and
  b is the same column after the operation. We use hardware to perform the
  multiplication in GF(2^8).
  */

  tmp=aes_state[3+0]^aes_state[2+0]^aes_state[1+0]^aes_state[0];
  //tmp = a0 + a1 + a2 + a3 (in modular aritmetic)
  col=aes_state[0];

  CCPDATIA = aes_state[0]^aes_state[1+0];
  r=CCPDATO;
  //r = 2*(a0 + a1)
  aes_state[0]= r^tmp^(aes_state[0]);
  //b0 = 3a0 + 3a1 + a2 +a3 - a0 = 2a0 +3a1 + a2 + a3

  CCPDATIA = aes_state[1+0]^aes_state[2+0];
  r=CCPDATO;
  //r = 2*(a1 + a2)
  aes_state[1+0]= r^tmp^(aes_state[1+0]);
  //b1 = a0 + 3a1 + 3a2 +a3 - a1 = a0 +2a1 + 3a2 + a3

  CCPDATIA = aes_state[2+0]^aes_state[3+0];
  r=CCPDATO;
  //r = 2*(a2 + a3)
  aes_state[2+0]= r^tmp^(aes_state[2+0]);
  //b2 = a0 + a1 + 3a2 +3a3 - a2 = a0 +a1 + 2a2 + 3a3

  CCPDATIA = aes_state[3+0]^col;
  r=CCPDATO;
  //r = 2*(a3 + a0)
  aes_state[3+0]= r^tmp^(aes_state[3+0]);
  //b3 = 3a0 + a1 + a2 +3a3 - a3 = 3a0 +a1 + a2 + 2a3


  tmp=aes_state[3+4]^aes_state[2+4]^aes_state[1+4]^aes_state[4];
  col=aes_state[4];

  CCPDATIA = aes_state[4]^aes_state[1+4];
  r=CCPDATO;
  aes_state[4]= r^tmp^(aes_state[4]);

  CCPDATIA = aes_state[1+4]^aes_state[2+4];
  r=CCPDATO;
  aes_state[1+4]= r^tmp^(aes_state[1+4]);

  CCPDATIA = aes_state[2+4]^aes_state[3+4];
  r=CCPDATO;
  aes_state[2+4]= r^tmp^(aes_state[2+4]);

  CCPDATIA = aes_state[3+4]^col;
  r=CCPDATO;
  aes_state[3+4]= r^tmp^(aes_state[3+4]);


  tmp=aes_state[3+8]^aes_state[2+8]^aes_state[1+8]^aes_state[8];
  col=aes_state[8];

  CCPDATIA = aes_state[8]^aes_state[1+8];
  r=CCPDATO;
  aes_state[8]= r^tmp^(aes_state[8]);

  CCPDATIA = aes_state[1+8]^aes_state[2+8];
  r=CCPDATO;
  aes_state[1+8]= r^tmp^(aes_state[1+8]);

  CCPDATIA = aes_state[2+8]^aes_state[3+8];
  r=CCPDATO;
  aes_state[2+8]= r^tmp^(aes_state[2+8]);

  CCPDATIA = aes_state[3+8]^col;
  r=CCPDATO;
  aes_state[3+8]= r^tmp^(aes_state[3+8]);


  tmp=aes_state[3+12]^aes_state[2+12]^aes_state[1+12]^aes_state[12];
  col=aes_state[12];

  CCPDATIA =aes_state[12]^aes_state[1+12];
  r=CCPDATO;
  aes_state[12]= r^tmp^(aes_state[12]);

  CCPDATIA = aes_state[1+12]^aes_state[2+12];
  r=CCPDATO;
  aes_state[1+12]= r^tmp^(aes_state[1+12]);

  CCPDATIA =aes_state[2+12]^aes_state[3+12];
  r=CCPDATO;
  aes_state[2+12]= r^tmp^(aes_state[2+12]);

  CCPDATIA = aes_state[3+12]^col;
  r=CCPDATO;
  aes_state[3+12]= r^tmp^(aes_state[3+12]);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产白丝网站精品污在线入口| 亚洲成人福利片| 麻豆91免费观看| 91精品国产一区二区三区| 一卡二卡欧美日韩| 色婷婷亚洲一区二区三区| 亚洲视频免费在线观看| 不卡视频免费播放| 日韩美女啊v在线免费观看| jiyouzz国产精品久久| 亚洲欧美在线观看| 91猫先生在线| 亚洲综合图片区| 欧美军同video69gay| 日韩成人伦理电影在线观看| 在线成人午夜影院| 久久国产福利国产秒拍| 久久日一线二线三线suv| 国产一区二区主播在线| 久久久久久久久一| 成a人片亚洲日本久久| 亚洲日本欧美天堂| 欧美在线你懂得| 日韩二区三区四区| 精品国产第一区二区三区观看体验| 狠狠色狠狠色综合系列| 国产三级精品三级在线专区| av在线播放成人| 亚洲一区二区三区中文字幕在线| 91国产免费观看| 久久成人精品无人区| 国产精品欧美一区喷水| 欧美性三三影院| 麻豆精品国产传媒mv男同| 国产欧美日产一区| 91麻豆视频网站| 另类欧美日韩国产在线| 欧美激情艳妇裸体舞| 91久久精品午夜一区二区| 日韩av成人高清| 欧美国产日韩在线观看| 欧美日韩精品电影| 国产精品888| 亚洲一区日韩精品中文字幕| 日韩欧美国产精品| 91丝袜国产在线播放| 日韩高清不卡在线| 国产精品久久久久久久午夜片| 色噜噜狠狠成人中文综合| 青青草视频一区| 中文字幕一区二区三区在线不卡| 欧美日韩美少妇| 成人理论电影网| 免费观看在线综合色| 成人免费视频在线观看| 日韩精品一区二区三区蜜臀 | 色噜噜夜夜夜综合网| 六月婷婷色综合| 亚洲精品国产一区二区三区四区在线| 91精品国产乱码久久蜜臀| 91婷婷韩国欧美一区二区| 免播放器亚洲一区| 亚洲精选免费视频| 久久色在线观看| 欧美精品久久99| 一本一道综合狠狠老| 国产精品一区二区x88av| 午夜精品久久久久影视| 亚洲四区在线观看| 国产欧美日韩在线观看| 日韩一区二区三区在线| 91丨porny丨在线| 国产一区二区三区蝌蚪| 日本亚洲欧美天堂免费| 美国一区二区三区在线播放| 国产精品每日更新| 久久久久9999亚洲精品| 日韩区在线观看| 欧洲亚洲国产日韩| 9人人澡人人爽人人精品| 韩国v欧美v日本v亚洲v| 免费欧美在线视频| 亚洲r级在线视频| 亚洲激情av在线| **欧美大码日韩| 国产精品久久夜| 国产欧美日韩精品在线| 久久精品视频在线看| 精品国产精品网麻豆系列| 欧美mv和日韩mv国产网站| 日韩精品一区二区三区视频播放 | 精品福利在线导航| 欧美一二三四区在线| 欧美日韩mp4| 欧美日韩免费在线视频| 欧洲av一区二区嗯嗯嗯啊| 色综合天天综合在线视频| 99精品欧美一区二区三区小说| 国产盗摄精品一区二区三区在线| 久久99久久精品欧美| 精品一区二区三区免费| 极品少妇一区二区三区精品视频| 老司机免费视频一区二区三区| 久久爱www久久做| 黄色日韩网站视频| 国产一区二区三区四区五区入口| 精品一区二区三区影院在线午夜| 国产一区二区三区美女| 国产suv一区二区三区88区| 成人18视频日本| 精品国产精品一区二区夜夜嗨| 亚洲国产另类精品专区| 色噜噜久久综合| 日本免费新一区视频| 经典三级一区二区| 国产成都精品91一区二区三| av电影在线观看不卡| 欧美亚洲国产bt| 日韩欧美一区二区三区在线| 久久免费精品国产久精品久久久久| 久久九九国产精品| 亚洲欧美另类综合偷拍| 亚洲午夜精品在线| 美女一区二区视频| 国产成人一区在线| 日本韩国欧美国产| 日韩精品一区二区三区三区免费| 国产欧美一区二区在线观看| 国产一区二区伦理| 不卡视频一二三四| 777久久久精品| 国产日韩v精品一区二区| 一区二区三区波多野结衣在线观看 | 国产精品私人影院| 亚洲一区二区精品3399| 免费成人你懂的| 丁香婷婷综合网| 欧美三级视频在线| 精品久久久久一区二区国产| 成人欧美一区二区三区视频网页| 午夜电影久久久| 成人午夜视频在线观看| 欧美视频三区在线播放| 久久女同精品一区二区| 夜夜嗨av一区二区三区中文字幕| 日本伊人午夜精品| 91天堂素人约啪| 精品久久久三级丝袜| 一区二区日韩av| 国产成人午夜高潮毛片| 欧美日韩国产乱码电影| 国产精品乱子久久久久| 美女网站在线免费欧美精品| 99麻豆久久久国产精品免费| 日韩三级免费观看| 一区二区三区在线免费观看| 韩国精品免费视频| 精品视频在线免费看| 国产色综合一区| 香蕉久久一区二区不卡无毒影院| 成人午夜视频在线观看| 欧美电视剧免费全集观看| 亚洲精品成人在线| 国产原创一区二区| 欧美欧美午夜aⅴ在线观看| 中文字幕中文字幕中文字幕亚洲无线| 日本不卡123| 欧美日韩免费不卡视频一区二区三区| 国产精品久久久久一区二区三区 | 久久久久青草大香线综合精品| 亚洲不卡在线观看| 91美女蜜桃在线| 日本一区二区不卡视频| 蜜桃视频在线一区| 欧美色视频在线观看| 亚洲色欲色欲www| 成人免费看黄yyy456| 亚洲精品一区二区三区影院 | 成人高清伦理免费影院在线观看| 日韩免费看的电影| 日韩av不卡在线观看| 欧美亚洲自拍偷拍| 亚洲另类一区二区| 91麻豆精品在线观看| 国产精品短视频| 成人精品电影在线观看| 天堂影院一区二区| 色一情一伦一子一伦一区| 中文字幕一区二区5566日韩| 成人av在线看| 日韩一区欧美小说| 99久久久精品免费观看国产蜜| 国产日产欧美一区二区视频| 国产毛片精品视频| 久久精品亚洲麻豆av一区二区 | 成人av网站在线观看免费| 久久综合狠狠综合久久激情| 久久成人免费电影| 26uuu国产一区二区三区| 国产一区二区三区电影在线观看|