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

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

?? ecc_encrypt.c

?? 基于msp430的橢圓曲線加密器程序
?? C
?? 第 1 頁 / 共 2 頁
字號:

//***************程序說明****************************************//
//程序名稱:    射頻數據通信 AUCT-Scanner.C                      //
//功能:        無線掃碼器                                       //
//硬件環境:    MSP430F135; NRF2401                              //
//軟件開發環境:IAR Embedded Workbench for MSP430 V3             //
//制作單位:    艾易(武漢)電子技術有限公司                       //
//作者:                                                         //
//日期:        2007.1.1                                        //
//***************************************************************//

#include  <msp430x13x.h>
#include  "ECC_Encrypt.h"
#include  <string.h>
//--------------------------------------可調用函數(子程序)---------------------------//

//**************************************************************
//函數名稱: void Software_delay(unsigned int i)
//函數說明: 軟件延時程序
//參數說明: 延時時間單位:1/4微秒,16位長
//返回值  : 無  
//**************************************************************
#include <stdio.h>
#include "stdio.h"
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h> 
#include <stdlib.h>

unsigned char p=29;
unsigned char a=4;
unsigned char b=20;
//--------------------------------------可調用函數(子程序)---------------------------//

//**************************************************************
//函數名稱: void Software_delay(unsigned int i)
//函數說明: 軟件延時程序
//參數說明: 延時時間單位:1/4微秒,16位長
//返回值  : 無  
//**************************************************************
void Software_delay(unsigned int i)
{
    while(i--)
    {;}
}
//**************************************************************
//函數名稱: void Software_delay(unsigned int i)
//函數說明: 軟件延時程序
//參數說明: 延時時間單位:1/4微秒,16位長
//返回值  : 無  
//**************************************************************
void delayms(unsigned int i)
{int j;
    while(i--)
    {
      for(j=1;j<=500;j++)
      {;}
    }

}
//**************************************************************
//函數名稱: void send_uart_a_byte(unsigned char sendbyte)
//函數說明: 異步串口發送一字節數據
//參數說明: 要發送的數據,
//返回值  : 無  
//調用函數: 
//引腳說明: TXD_PIN---串口發送引腳
//**************************************************************
void send_uart_a_byte(unsigned char sendbyte)
{
    while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready? 異步串口發送緩存是否準備好。
    TXBUF0 = sendbyte;         //將輸入的要發送的數據存放到緩存,          
}

//******************************************************************
//函數名稱: void uart_command_prog(void)
//函數說明: 串口命令處理
//返回值:   error
//調用函數: void send_spi_configure(unsigned char ByteCount); void send_spi_string(void); 
//全局變量: g_UartCommand;g_recv_count; g_SpiDataCount; g_SpiAddrCount;g_buf[32]; g_configer[15];
//函數功能說明:串口命令字為g_UartCommand,其命令共有三個:01,02,03。
//              當為01時表示重新配置射頻頭;為02時表示發射一幀數據;為03時表示待機.
//******************************************************************
void uart_command_prog(void)
{
    unsigned char i,j;
    unsigned char ciphertext1,ciphertext2,cleartext,cleartext1;
    unsigned char temp[2];
    j=0;
    switch(g_UartCommand)
    {
        case GET_ENCRYPT_PK_COMD:                      //命令1:請求加密方公鑰
        {
            if(g_recv_count == 3)        //只配置最后一個字節進行收發轉換
            {
               //g_configer[TR_CONFIG_BYTE] = g_buf[0]; 
               
                //生成加密方私鑰,傳出g_encrypt_private_key:1個字節
                SHA_a_4(g_buf[0],&g_encrypt_private_key);
	        //生成公鑰,輸入g_encrypt_private_key,px(CONT),py(CONT);輸出公鑰g_encrypt_pk_x,g_encrypt_pk_y。	        
	        kp(g_encrypt_private_key,px,py,&g_encrypt_pk_x,&g_encrypt_pk_y);
                
                //生成串口一幀數據(命令字,數據長度,加密方的公鑰)
                g_buf_out[0]=0x01;
                g_buf_out[1]=0x04;
                g_buf_out[2]=g_encrypt_pk_x;
                g_buf_out[3]=g_encrypt_pk_y;
               // for(i=0;i<=1000;i++)
                //{Software_delay(200);}
                //從串口傳出加密方公鑰數據
                           // for(i=0;i<=30;i++)
               //{
               //delayms(20);
                for(i=0;i<=3;i++)
                {
                    send_uart_a_byte(g_buf_out[i]+0x30);
                }
//}//
            }
            else
            {
                g_uart_answer = 1;                            //如果g_recv_count不為 3或 17,則報錯。
            }
            break;
        }
        case SENT_DECRYPT_PK_COMD:                               //命令2:向加密方傳送解密方的公鑰
        {   
            g_decrypt_pk_x=g_buf[0];                           //保存解密方公鑰x
            g_decrypt_pk_y=g_buf[1];                          //保存解密方公鑰y
            g_buf_out[0]=0x02;
            g_buf_out[1]=0x02;
            for(i=0;i<=1;i++)
            {
               send_uart_a_byte(g_buf_out[i]+0x30);
            }
            break;
        }    
        case SENT_ENCRYPT_COMD:                                //命令3:向加密方發送加密命令
        {          
          //從串口收明文mw,向串口發密文cx,cy。交叉存。
           g_buf_out[j++]=0x03;
           g_buf_out[j++]=0x08;
           
        
           for(i=0;i<g_recv_count-2;i++)
           {
                //加密,mw為明文,輸出cx、cy為密文,yes為是嵌入。
                temp[0]=g_buf[i]&0x0F;
                temp[1]=g_buf[i]>>4;
                //for()
                encryption(temp[0],g_decrypt_pk_x,g_decrypt_pk_y,&ciphertext1,&ciphertext2,&yes);
                g_buf_out[j++]=ciphertext1;//傳出X
                g_buf_out[j++]=ciphertext2;//傳出Y
                g_buf_out[j++]=yes;//傳出嵌入標志
                
                encryption(temp[1],g_decrypt_pk_x,g_decrypt_pk_y,&ciphertext1,&ciphertext2,&yes);
                g_buf_out[j++]=ciphertext1;//傳出X
                g_buf_out[j++]=ciphertext2;//傳出Y
                g_buf_out[j++]=yes;//傳出嵌入標志
           }
           //從串口傳出加密方公鑰數據
           for(i=0;i<j;i++)
           {
               send_uart_a_byte(g_buf_out[i]);
           }
           break;
       }
       case GET_DECRYPT_PK_COMD:
       {
            if(g_recv_count == ONE_BYTE_CONFIG)        //只配置最后一個字節進行收發轉換
            {
               //g_configer[TR_CONFIG_BYTE] = g_buf[0]; 
               
                //生成解密方私鑰,傳出g_decrypt_private_key:1個字節
                SHA_b_4(g_buf[0],&g_decrypt_private_key);
	        //生成公鑰,輸入g_encrypt_private_key,px(CONT),py(CONT);輸出公鑰g_decrypt_pk_x,g_decrypt_pk_y。	        
	        kp(g_decrypt_private_key,px,py,&g_decrypt_pk_x,&g_decrypt_pk_y);

                //生成串口一幀數據(命令字,數據長度,解密方的公鑰)
                g_buf_out[0]=0x04;
                g_buf_out[1]=0x04;
                g_buf_out[2]=g_decrypt_pk_x;
                g_buf_out[3]=g_decrypt_pk_y;
                
                //從串口傳出解密方公鑰數據
                for(i=0;i<=3;i++)
                {
                    send_uart_a_byte(g_buf_out[i]+0x30);
                }

            }
            else
            {
                g_uart_answer = 1;                            //如果g_recv_count不為 3或 17,則報錯。
            }
            break;
       
       }
       case SENT_ENCRYPT_PK_COMD:
       {
            g_encrypt_pk_x=g_buf[0];                           //保存加密方公鑰x
            g_encrypt_pk_y=g_buf[1];                           //保存加密方公鑰y
            
            g_buf_out[0]=0x05;
            g_buf_out[1]=0x02;
            for(i=0;i<=1;i++)
            {
               send_uart_a_byte(g_buf_out[i]+0x30);
            }
            break;
       }
       case SENT_DECRYPT_COMD:
       {
           g_buf_out[j++]=0x06;
           g_buf_out[j++]=0x03;
           
 /*          for(i=0;i<g_recv_count-2;i++)
           {
                //加密,mw為明文,輸出cx、cy為密文,yes為是嵌入。
                //decode(g_buf[i],g_buf[i+1],g_encrypt_pk_x,g_encrypt_pk_y,yes,&cleartext);
                decode(g_buf[i],g_buf[i+1],g_encrypt_pk_x,g_encrypt_pk_y,g_buf[i+2],&cleartext);
                g_buf_out[j++]=cleartext;
                i++;
                i++;
           }*/

                //加密,mw為明文,輸出cx、cy為密文,yes為是嵌入。
                //decode(g_buf[i],g_buf[i+1],g_encrypt_pk_x,g_encrypt_pk_y,yes,&cleartext);
           decode(g_buf[0],g_buf[1],g_encrypt_pk_x,g_encrypt_pk_y,g_buf[2],&cleartext);
                
           decode(g_buf[3],g_buf[4],g_encrypt_pk_x,g_encrypt_pk_y,g_buf[5],&cleartext1);
         
          g_buf_out[j++]=cleartext|(cleartext1<<4);
           //從串口傳出加密方公鑰數據
           for(i=0;i<j;i++)
           {
               send_uart_a_byte(g_buf_out[i]);
           }
           break;
       }
        default:
        
            g_uart_answer = 1;                                //報錯
            
            break;
    }//switch()語句結束
}
unsigned char add(unsigned char add_1,unsigned char add_2)
{
    unsigned char sum;
    sum=add_1+add_2;
    sum=sum%p;
    return sum;

}



unsigned char sub(unsigned char sub_1,unsigned char sub_2)
{
    unsigned char sum;
    sum=sub_1-sub_2;
    sum=sum%p;
    return sum;
}



unsigned char mul(unsigned char mul_1,unsigned char mul_2)
{
    unsigned char sum;
    sum=mul_1*mul_2;
    sum=sum%p;
    return sum;
}



unsigned char division(unsigned char div_1,unsigned char div_2)
{
    unsigned char sum;
    sum=div_1/div_2;
    sum=sum%p;
    return sum;
}



void addition(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char *x3,unsigned char *y3)
{
    unsigned char x3_tmp=0;
	unsigned char y3_tmp=0;
	unsigned char fenzi=0;
	unsigned char fenmu=0;
	unsigned char kuohao=0;
	unsigned char kuohao2=0;
	unsigned char xiaokuohao=0;
	unsigned char dakuohao=0;


	if(x1==x2)
		square(x1,y1,&x3_tmp,&y3_tmp);   //如果兩個數相同,調用倍點

	else if(y1==0)
	{
		x3_tmp=x2;
		y3_tmp=y2;
	}
	else if(y2==0)
	{
		x3_tmp=x1;
		y3_tmp=y1;
	}
	else
	{
		fenzi=sub(y2,y1);//fenzi=y2-y1
		fenmu=sub(x2,x1);//fenmu=x2-x1
		kuohao=division(fenzi,fenmu);//kuohao=(y2-y1)/(x2-x1)
		kuohao2=mul(kuohao,kuohao);//kuohao2=kuohao^2
		x3_tmp=sub(kuohao2,x1);//x3
		x3_tmp=sub(x3_tmp,x2);//x3
		xiaokuohao=sub(x1,x3_tmp);//xiaokuohao=x1-x3
		dakuohao=mul(kuohao,xiaokuohao);//dakuohao=(y2-y1)/(x2-x1)*(x1-x3)
		y3_tmp=sub(dakuohao,y1);//y3
    }
	*x3=x3_tmp;
	*y3=y3_tmp;
}




void square(unsigned char x1,unsigned char y1,unsigned char *x3,unsigned char *y3)
{
	unsigned char x3_tmp=0;
	unsigned char y3_tmp=0;
	unsigned char fenzi=0;
	unsigned char fenmu=0;
	unsigned char kuohao=0;
	unsigned char kuohao2=0;
	unsigned char xiaokuohao=0;
	unsigned char dakuohao=0;
	unsigned char h2=2;
	unsigned char h3=3;
	

	if(y1==0)
	{
		x3_tmp=x1;
		y3_tmp=y1;
	}
	else
	{
		fenzi=mul(x1,x1);//fenzi=x1^2
		fenzi=mul(fenzi,h3);//fenzi=3*x1^2
		fenzi=add(fenzi,a);//fenzi=3*x1^2+a
		fenmu=mul(y1,h2);//fenmu=2*y1
		
		kuohao=division(fenzi,fenmu);//kuohao=(3*x1^2+a)/(2*y1)
		kuohao2=mul(kuohao,kuohao);//kuohao2=kuohao^2
		x3_tmp=sub(kuohao2,x1);
		x3_tmp=sub(x3_tmp,x1);//x3
		xiaokuohao=sub(x1,x3_tmp);//xiaokuohao=x1-x3
		dakuohao=mul(kuohao,xiaokuohao);//dakuohao=(3*x1^2+a)/(2*y1)*(x1-x3)
		y3_tmp=sub(dakuohao,y1);//y3
	}
    *x3=x3_tmp;
	*y3=y3_tmp;
}



void proclaimed(unsigned char mw,unsigned char *pmx,unsigned char *pmy,unsigned char *yes)
{
	unsigned char h1=1;
	unsigned char h20=20;
	unsigned char x3=0;
	unsigned char xa=0;
	unsigned char bufferyes=0;
	int t=0,j;




	x3=mul(mw,mw);
	x3=mul(x3,mw);
	xa=mul(mw,a);
	x3=add(x3,xa);
	x3=add(x3,b);//x3=x^3+4x+20

	t=oula(x3);

	if(t==1)   //可以嵌入
	{
		*pmx=mw;
	    *pmy=(unsigned char)sqrt(x3);
	}
	else
	{
		mw=mul(mw,h20);
		mw=sub(mw,h1);
		for(j=0;j<=19;j++)
		{
			mw=add(mw,h1);
			
			x3=mul(mw,mw);
	        x3=mul(x3,mw);
	        xa=mul(mw,a);
	        x3=add(x3,xa);
        	x3=add(x3,b);//x3=x^3+4x+20

			t=oula(x3);

			if(t==1)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
9191成人精品久久| 日韩不卡一区二区三区| 三级影片在线观看欧美日韩一区二区 | 在线观看欧美黄色| 一区二区三区日韩精品视频| 色综合色狠狠综合色| 亚洲一区二区三区四区在线免费观看| 欧美日韩一区二区三区在线看| 婷婷六月综合亚洲| 国产午夜精品久久| 91麻豆高清视频| 亚洲香蕉伊在人在线观| 精品国产免费久久 | 午夜精品一区二区三区电影天堂| 亚洲欧美日韩综合aⅴ视频| 欧美日韩一级视频| 精品1区2区3区| 日韩一区二区中文字幕| caoporn国产一区二区| 91在线观看免费视频| 91在线观看美女| 欧美精品九九99久久| av成人动漫在线观看| 色哟哟国产精品| 日韩一区国产二区欧美三区| 欧美国产日韩在线观看| 欧美日本韩国一区| 99re热这里只有精品免费视频| 久久99精品国产91久久来源| 亚洲人成网站色在线观看| 亚洲成a人在线观看| 亚洲欧美日韩在线不卡| 视频一区二区不卡| 丁香桃色午夜亚洲一区二区三区| 中文字幕免费不卡| 亚洲国产乱码最新视频| 狠狠色狠狠色综合系列| 人人精品人人爱| 亚洲愉拍自拍另类高清精品| 精品综合久久久久久8888| 成人高清免费观看| 波多野结衣视频一区| 欧美日韩亚洲综合一区二区三区| 精品国产乱码久久久久久老虎| 国产精品毛片久久久久久| 久久亚洲精品小早川怜子| 欧美变态tickle挠乳网站| 色哦色哦哦色天天综合| 久久综合九色综合欧美亚洲| 亚洲一区中文日韩| jlzzjlzz亚洲女人18| 日韩三级免费观看| 午夜精品久久久久久久久久| 波多野洁衣一区| 久久精品欧美一区二区三区麻豆| 爽好多水快深点欧美视频| 99久久国产综合色|国产精品| 欧美精品一区二区三区久久久| 亚洲一区二区av在线| 91在线云播放| 中文字幕一区二区三区在线观看| 国产农村妇女毛片精品久久麻豆 | 欧美精品自拍偷拍| 亚洲自拍都市欧美小说| 9l国产精品久久久久麻豆| 久久久久久久久久美女| 中文子幕无线码一区tr| 精品中文字幕一区二区小辣椒| 欧美日韩亚洲不卡| 一区二区三区四区精品在线视频| 国产成人一区二区精品非洲| 色琪琪一区二区三区亚洲区| 国产精品久久久久久久岛一牛影视 | 欧美成人官网二区| 日本成人在线不卡视频| 欧美日韩一区二区三区免费看| 亚洲欧美另类小说视频| 成人美女视频在线观看18| 国产日产欧美一区二区视频| 国产麻豆精品久久一二三| 成人aaaa免费全部观看| 国产精品国产三级国产三级人妇| 粉嫩久久99精品久久久久久夜| 国产日韩精品一区| 99综合影院在线| 一区二区三区中文免费| 欧美无人高清视频在线观看| 久久综合九色综合欧美就去吻| 国产精品综合久久| 欧美日本一区二区在线观看| 香蕉久久夜色精品国产使用方法| 在线观看91av| 国模大尺度一区二区三区| 欧美激情一区二区在线| 99久久99久久综合| 亚洲一区二区av电影| 日韩情涩欧美日韩视频| 国产一区二区免费视频| 中文字幕一区二区三区在线播放 | 国产精品综合一区二区| 亚洲欧洲国产日本综合| 欧美色图天堂网| 精品一区二区在线观看| 综合色天天鬼久久鬼色| 精品在线播放午夜| 国产精品狼人久久影院观看方式| 色婷婷精品久久二区二区蜜臀av| 偷拍亚洲欧洲综合| 欧美国产日韩亚洲一区| 欧美日本一道本| 97成人超碰视| 乱中年女人伦av一区二区| 在线免费观看成人短视频| 免费在线观看日韩欧美| 国产精品国产馆在线真实露脸| 欧美日韩国产首页| 成人亚洲精品久久久久软件| 水野朝阳av一区二区三区| 国产精品护士白丝一区av| 制服丝袜在线91| 91在线视频免费观看| 精品一区二区三区影院在线午夜 | 国产日韩欧美综合一区| 欧美久久久久久久久中文字幕| 成人精品国产免费网站| 蜜臀精品一区二区三区在线观看| 在线播放中文一区| av电影在线观看不卡| 激情综合网激情| 天天操天天干天天综合网| **性色生活片久久毛片| 欧美精品一区二区蜜臀亚洲| 欧美精品123区| 色欧美片视频在线观看在线视频| 国产成人精品亚洲777人妖| 日日欢夜夜爽一区| 香蕉久久夜色精品国产使用方法 | 亚洲人成精品久久久久| 国产喂奶挤奶一区二区三区| 日韩三级视频在线观看| 欧美日韩一区二区三区在线| 色噜噜狠狠色综合中国| 午夜精品久久久久久久久久| 一区二区在线观看免费视频播放| 色乱码一区二区三区88| av亚洲精华国产精华| 懂色av噜噜一区二区三区av| 国产成人av福利| 国产不卡视频一区二区三区| 韩国精品主播一区二区在线观看| 亚洲国产视频一区二区| 夜夜嗨av一区二区三区网页| 亚洲美女淫视频| 一区二区三区精品久久久| 亚洲美女免费视频| 一区二区三区.www| 亚洲午夜久久久久| 日本伊人午夜精品| 久久国产婷婷国产香蕉| 精品一区二区在线免费观看| 国产精品一区二区三区网站| 久久久国产精品不卡| 欧美一区二区在线看| 国产精品一二三四| 国产欧美日韩视频在线观看| 国产视频不卡一区| 自拍偷拍亚洲欧美日韩| 一区二区日韩电影| 日本美女视频一区二区| 久久99精品久久久久婷婷| 国产精品伊人色| 国产麻豆精品theporn| 国产91色综合久久免费分享| 91亚洲永久精品| 欧美肥妇free| 久久色.com| 综合婷婷亚洲小说| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品亚洲一区二区三区妖精| 不卡视频在线观看| 欧美日韩一级片在线观看| 精品久久久久久亚洲综合网| 国产精品福利一区| 偷拍一区二区三区四区| 国产成人aaaa| 欧美精品123区| 中文字幕一区二区三区四区| 天堂资源在线中文精品| 欧美精品一区二区精品网| 亚洲天堂免费看| 精品一区二区三区免费| 99久久精品免费看国产| 欧美一区二区三区免费在线看 | 丝瓜av网站精品一区二区| 九九视频精品免费| 色一情一乱一乱一91av| 亚洲精品一区二区三区在线观看| 亚洲精品一卡二卡| 国内精品伊人久久久久av影院| 日本电影欧美片|