CRYP簡介
MCU加/解密可分為對稱加/解密、非對稱加/解密、以及HASH算法,以上加/解密算法均可通過CAVP FIPS認(rèn)證,用于各類安全相關(guān)應(yīng)用。其中,包含DES、三重DES(TDES)或AES(128、192或256)等算法的加密處理器(CRYP)即為對稱加/解密算法。通過CRYP,可實現(xiàn)對數(shù)據(jù)進(jìn)行加密或解密,且該加密處理器完全兼容下列標(biāo)準(zhǔn):
·聯(lián)邦信息處理標(biāo)準(zhǔn)出版物“FIPS PUB 46-3,1999年10月25日”規(guī)定的數(shù)據(jù)加密標(biāo)準(zhǔn)(DES和TDES)。它遵循美國國家標(biāo)準(zhǔn)協(xié)會(ANSI)X9.52標(biāo)準(zhǔn)。
·聯(lián)邦信息處理標(biāo)準(zhǔn)出版物(FIPS PUB 197,2001年11月26日)規(guī)定的高級加密標(biāo)準(zhǔn)(AES)。
CRYP處理器可在電子密碼本(ECB)模式或加密分組鏈接(CBC)模式下使用DES和TDES算法執(zhí)行數(shù)據(jù)加密和解密。
CRYP外設(shè)為32位AHB2外設(shè)。它支持傳入數(shù)據(jù)和已處理數(shù)據(jù)的DMA傳輸,并具有輸入和輸出FIFO(分別為8個字深),本次例程采用DES128 ECB算法進(jìn)行驗證,文章將著重講解該部分,其余算法詳見參考手冊。
CRYP 主要特性
·適用于AES、DES和TDES加密和解密操作
·DES
-直接執(zhí)行簡單DES算法(使用單一密鑰K1)
-支持ECB和CBC鏈接算法
-支持64位、128位和192位密鑰(包括奇偶校驗)
-支持在CBC模式下使用的2×32位初始化向量(IV)
-使用DES處理一個64位塊需要16個HCLK周期
CRYP功能說明
加密處理器可實現(xiàn)TDES(同樣支持DES)內(nèi)核和AES加密內(nèi)核。
由于TDES和AES算法使用塊密碼,因此,加密前需對不完整的輸入數(shù)據(jù)塊進(jìn)行填充(應(yīng)將額外的位附加到數(shù)據(jù)串的尾端),解密后需要丟棄填充項。硬件不處理填充操作,需要通過軟件進(jìn)行處理。圖1顯示了加密處理器的框圖。
圖1加密處理器框圖
1.DES加密內(nèi)核
--DES加密內(nèi)核由三部分組成
·DES算法(DEA)
·初始化向量(在CBC模式中使用)
·DES模式:密鑰=[K1]
--DES和TDES電子密碼本(DES/TDES-ECB)模式
·DES-ECB模式加密
DES電子密碼本(DES/TDES-ECB)模式中的加密是通過64位明文數(shù)據(jù)塊(P)經(jīng)過位/字節(jié)/半字交換(請參見1.3.2節(jié):數(shù)據(jù)類型的表1)后作為輸入塊(I)。輸入塊通過DEA在加密狀態(tài)下使用K1進(jìn)行加密處理。
若是TDES,則會將上述處理過程的輸出會直接反饋到DEA的輸入,在解密狀態(tài)下使用K2執(zhí)行DES,然后重復(fù)將上一步處理的輸出反饋到DEA的輸入,在加密狀態(tài)下使用K3執(zhí)行DES,最后生成的64位輸出塊(O)在執(zhí)行位/字節(jié)/半字交換之后,以密文(C)形式推入OUT FIFO,加密流程如圖2所示。
圖2DES-ECB模式加密
①K:密鑰;C:密文;I:輸入塊;O:輸出塊;P:明文。
·DES/TDES-ECB模式解密
圖3介紹了DES-ECB解密流程,64位密文(C)經(jīng)過位/字節(jié)/半字交換后,作為輸入塊(I),而該密鑰序列將使用與加密過程相反的密鑰序列來實現(xiàn)。輸入塊通過DEA在解密狀態(tài)下使用K3進(jìn)行解密處理,然后,將上述處理過程的輸出會直接反饋到DEA的輸入,在加密狀態(tài)下使用K2執(zhí)行DES,使得新結(jié)果會直接反饋到DEA的輸入,在解密狀態(tài)下使用K1執(zhí)行DES,最后,將生成的64位輸出塊(O)再進(jìn)行位/字節(jié)/半字交換后,產(chǎn)生明文(P),以上便是解密過程。
圖3DES-ECB 模式解密
①K:密鑰;C:密文;I:輸入塊;O:輸出塊;P:明文
2.數(shù)據(jù)類型
將數(shù)據(jù)寫入CRYP_DIN寄存器時,會一次性向CRYP處理器輸入32位(字)數(shù)據(jù)。由于DES的原則是每隔64位對數(shù)據(jù)流進(jìn)行處理,因此,針對每個64位塊,DES都會對其進(jìn)行M1到M64的對位編號,其中M1為塊最左側(cè)的位,M64為塊最右側(cè)的位。
系統(tǒng)存儲器結(jié)構(gòu)采用小端模式:即無論使用何種數(shù)據(jù)類型(位、字節(jié)、16位半字、32位字),最低有效數(shù)據(jù)均占用最低地址位置。因此,對于從IN FIFO中讀取的數(shù)據(jù),在其進(jìn)入CRYP處理器之前,必須對這些數(shù)據(jù)執(zhí)行位、字節(jié)或半字交換操作(取決于要加密的數(shù)據(jù)類型)。在CRYP數(shù)據(jù)寫入OUT FIFO之前,需要對其執(zhí)行同樣的交換操作。例如,對ASCII文本流執(zhí)行字節(jié)交換操作。要處理的數(shù)據(jù)類型通過CRYP控制寄存器(CRYP_CR)中的DATATYPE位字段進(jìn)行配置。
表1數(shù)據(jù)類型
圖4展示了根據(jù)不同的DATATYPE值,CRYP處理器是如何將IN FIFO中彈出的兩個連續(xù)32位字構(gòu)建成64位數(shù)據(jù)塊M1...64的過程。同理,也可用該方法擴展構(gòu)建用于AES加密算法的128位數(shù)據(jù)塊(對于AES,塊長度為四個32位字,但由于交換僅發(fā)生在字級別,因此它與此處描述的TDES的交換過程相同),本文不再贅述。
注意:IN FIFO和CRYP數(shù)據(jù)塊之間,以及CRYP數(shù)據(jù)塊和OUT FIFO之間執(zhí)行相同的交換操作。
圖4根據(jù)DATATYPE構(gòu)建64位塊
3.初始化向量——CRYP_IV0...1(L/R)
初始化向量可視為兩個64位數(shù)據(jù)項,因此,初始化向量在系統(tǒng)存儲器中的數(shù)據(jù)格式和表示形式均不同于明文或密碼數(shù)據(jù),而且它們不受DATATYPE值的影響。初始化向量采用兩個連續(xù)的32位字進(jìn)行定義,即CRYP_IVL(左部分,記為位IV1...32)和CRYP_IVR(右部分,記為位IV33...64)。
以DES CBC算法為例,加密期間,CRYP_IV0(L/R)位會與一個64位數(shù)據(jù)塊(即,數(shù)據(jù)塊的M1...64位)進(jìn)行異或運算,這里的64位數(shù)據(jù)塊是根據(jù)DATATYPE值交換后從IN FIFO彈出的。當(dāng)DEA3塊的輸出可用時,該輸出值會復(fù)制到CRYP_IV0(L/R)向量,之后,這個新值與IN FIFO彈出的下一個64位數(shù)據(jù)塊進(jìn)行異或運算,以此類推。
在DES CBC解密期間,CRYP_IV0(L/R)位首先會與TDEA1塊輸出的64位數(shù)據(jù)塊(即,M1...64位)進(jìn)行異或運算,然后異或運算后的結(jié)果根據(jù)DATATYPE值進(jìn)行交換并壓入OUT FIFO。異或運算后的結(jié)果進(jìn)行交換并壓入OUT FIFO后,IN FIFO的輸出會取代CRYP_IV0(L/R)值,然后IN FIFO執(zhí)行彈出操作,隨后可對新的64位數(shù)據(jù)塊進(jìn)行處理。
當(dāng)CRYP_SR寄存器的BUSY位=1b時,針對CRYP_IV0...1(L/R)寄存器的任何寫操作都會被忽略(CRYP_IV0...1(L/R)寄存器內(nèi)容不會被修改),因此,在修改初始化向量之前,必須檢查BUSY位是否等于0b。
4.CRYP忙碌狀態(tài)
當(dāng)輸入FIFO中有充足的數(shù)據(jù)(至少有2個字可用于DES算法模式時)、輸出FIFO中有充足的自由空間(至少有2個(DES/TDES)字位置),以及CRYP_CR寄存器中的位CRYPEN=1時,加密處理器會自動開始加密或解密過程(根據(jù)CRYP_CR寄存器中ALGODIR位的值)。
在此過程中,執(zhí)行簡易DES算法需16個AHB2時鐘周期。在整個過程中,CRYP_SR寄存器的BUSY位始終置“1”。完成此過程后,CRYP內(nèi)核會將兩個(DES)字寫入輸出FIFO,并將BUSY位清零。在CBC、CTR模式下,還會更新初始化向量CRYP_IVx(L/R)R(x=0..3)。
當(dāng)加密處理器繁忙時(CRYP_SR寄存器中的位BUSY=1b),會忽略針對密鑰寄存器(CRYP_Kx(L/R)R,x=0..3)、初始化寄存器(CRYP_IVx(L/R)R,x=0..3)或CRYP_CR寄存器的位[9:2]的寫操作,且不會修改這些寄存器,因此,不能在加密處理器處理數(shù)據(jù)塊時修改其配置。不過,可以在BUSY=1時將CRYPEN位清零,這種情況下,只有完成正在進(jìn)行的DES處理過程并將兩個字的結(jié)果寫入輸出FIFO后才能將BUSY位清零。
注意:在DES模式下處理某個塊時,如果輸出FIFO已滿并且輸入FIFO至少含一個新塊,則輸入FIFO會彈出新塊且BUSY位保持置1,直到有足夠的空間可將這個新塊存儲到輸出FIFO。
5.加密或解密執(zhí)行步驟
--初始化
1)初始化外設(shè)(在準(zhǔn)備密鑰之前必須輸入密鑰大小和密鑰值,準(zhǔn)備好密鑰后,必須立即配置相應(yīng)算法):
①將對稱密鑰寫入CRYP_KxL/R寄存器(需寫入2到8個寄存器,具體取決于算法);
②使用CRYP_CR寄存器中的DATATYPE位配置數(shù)據(jù)類型(1位、8位、16位或32位);
③使用CRYP_CR寄存器中的ALGOMODE位配置算法和鏈接(在ECB/CBC中為DES);
④使用CRYP_CR寄存器中的ALGODIR位配置方向(加密/解密);
2)向CRYP_CR寄存器中的FFLUSH位寫入1,刷新IN和OUT FIFO。
--DMA用于存儲器數(shù)據(jù)傳入和傳出時的處理過程
1)將DMA控制器配置為傳輸存儲器中的輸入數(shù)據(jù),傳輸長度為消息的長度。當(dāng)消息填充并非由外設(shè)進(jìn)行管理時,消息長度必須為整個數(shù)量的數(shù)據(jù)塊,數(shù)據(jù)傳輸均在突發(fā)模式下進(jìn)行。DES中的突發(fā)長度為2個字,應(yīng)將DMA配置為在完成輸出數(shù)據(jù)傳輸時設(shè)置一個中斷,以指示處理過程已結(jié)束;
2)通過向CRYPEN位寫入1來使能加密處理器,將CRYP_DMACR寄存器中的DIEN和DOEN位置1,以使能DMA請求;
3)所有傳輸和處理過程均由DMA和加密處理器管理,DMA中斷表示處理過程已完成,兩個FIFO通常均為空,且BUSY=0;
--在中斷期間通過CPU傳輸數(shù)據(jù)的處理過程
1)將CRYP_IMSCR寄存器中的INIM和OUTIM位置1,以使能中斷;
2)將CRYP_CR寄存器中的CRYPEN位置1,以使能加密處理器;
3)在中斷中管理輸入數(shù)據(jù):將輸入消息加載到IN FIFO,一次性可加載2個字或4個字,或者加載數(shù)據(jù)直到FIFO已滿。當(dāng)消息的最后一個字進(jìn)入FIFO時,可通過將INIM位清零來禁止中斷;
4)在中斷中管理輸出數(shù)據(jù):讀取OUT FIFO中的輸出消息。一次可讀取1個塊(2個字或4個字),或者讀取數(shù)據(jù)直到FIFO為空。讀取最后一個字后,INIM=0、BUSY=0且兩個FIFO均為空(IFEM=1且OFNE=0)。將OUTIM位清零可禁止中斷,而將CRYPEN位清零可禁止外設(shè)。
--不使用DMA也不使用中斷時的處理過程
1)將CRYP_CR寄存器中的CRYPEN位置1,以使能加密處理器;
2)將首個塊寫入輸入FIFO(2到8個字);
3)重復(fù)以下步驟,直到處理完整個信息:
①等待OFNE=1,然后讀取輸出FIFO(讀取1個塊,或FIFO為空為止);
②等待IFNF=1,然后寫入INFIFO(寫入1個塊,或FIFO已滿為止;
處理過程結(jié)束時,BUSY=0且兩個FIFO均為空(IFEM=1且OFNE=0),將CRYPEN位清零可禁止外設(shè)。
CRYP中斷
CRYP可產(chǎn)生兩個可單獨屏蔽的中斷源。這兩個中斷源共用同一個中斷信號,且該中斷信號是CRYP發(fā)出的唯一中斷信號,用于驅(qū)動NVIC(嵌套向量中斷控制器)。這一組合中斷是兩個單獨屏蔽的中斷源的或運算結(jié)果,如果下面列出的各個中斷中的任何一個中斷產(chǎn)生,則此組合中斷即會產(chǎn)生。
通過更改CRYP_IMSCR寄存器中的屏蔽位,可單獨使能或禁止各個中斷源,將相應(yīng)的屏蔽位置“1”以使能中斷。
關(guān)于各個中斷源的狀態(tài),通過CRYP_RISR寄存器可以讀取原始中斷狀態(tài),通過CRYP_MISR寄存器可以讀取屏蔽中斷狀態(tài)。
--輸出FIFO服務(wù)中斷–OUTMIS
當(dāng)輸出FIFO中存在一個或多個(32位字)數(shù)據(jù)項時,即會產(chǎn)生輸出FIFO服務(wù)中斷。通過讀取輸出FIFO的數(shù)據(jù),直到讀完所有有效(32位)字,即可將此中斷清除(即該中斷的狀態(tài)與OFNE(輸出FIFO非空)標(biāo)志一致)。
輸出FIFO服務(wù)中斷OUTMIS不是通過CRYP使能位使能,因此,如果輸出FIFO非空,即使禁止CRYP之后也不會強制OUTMIS信號為低電平。
--輸入FIFO服務(wù)中斷–INMIS
當(dāng)輸入FIFO中少于四個字時,會產(chǎn)生輸入FIFO服務(wù)中斷,對輸入FIFO執(zhí)行寫操作直到其中所含字不小于四字,這樣即可將此中斷清除。
輸入FIFO服務(wù)中斷INMIS通過CRYP使能位使能,因此,禁止CRYP之后,即使輸入FIFO為空,INMIS信號也為低(無效)。
圖5CRYP中斷映射圖表
CRYP DMA接口
加密處理器可使用一個接口連接DMA控制器。DMA操作通過CRYP DMA控制寄存器CRYP_DMACR進(jìn)行控制。
突發(fā)傳輸請求信號和單次傳輸請求信號并不相互排斥。這兩種信號可同時產(chǎn)生。例如,當(dāng)OUTFIFO中存在6個字時,會產(chǎn)生突發(fā)傳輸請求和單次傳輸請求。突發(fā)傳輸4個字之后,將只產(chǎn)生單次傳輸請求來傳輸余下的2個字。當(dāng)數(shù)據(jù)流中待接收的剩余字?jǐn)?shù)少于突發(fā)傳輸字?jǐn)?shù)時,這一特性就非常有用。
在產(chǎn)生相關(guān)的DMA清除信號之前,仍會產(chǎn)生各個請求信號。禁止請求信號清除之后,可再次激活某個請求信號,具體取決于上述條件。如果已禁止CRYP外設(shè)并且已將DMA使能位清零(CRYP_DMACR寄存器中的DIEN位用于IN FIFO,DOEN位用于OUT FIFO),則會禁止所有請求信號。
注意:DMA控制器必須配置為執(zhí)行不多余4字的突發(fā)傳輸。否則可能會丟失一些數(shù)據(jù)。為了在裝滿IN FIFO之前讓DMA控制器清空OUT FIFO,OUT DMA通道的優(yōu)先級應(yīng)高于INDMA通道。
CRYP原理部分介紹到此,下面介紹具體使用情況。
CRYP應(yīng)用實例
本節(jié),我們將針對CRYP部分與DMA部分共同完成一個實驗,首先需要在工程目錄下新建一個CRYP文件夾。CRYP為加密處理器,本節(jié)例程通過DES128EBC算法進(jìn)行驗證,再使用軟件Debug的方式查看加密與解密數(shù)據(jù)的正確與否。
打開本節(jié)實驗工程可發(fā)現(xiàn),相較其他工程,新增了幾項相關(guān)文件:
①cks32f4xx_cryp.c
②cks32f4xx_cryp.h
③cks32f4xx_cryp_des.c
④cks32f4xx_cryp_tdes.c
⑤cks32f4xx_cryp_aes.c
由于例程是通過CRYP加密處理器中的DES算法對數(shù)據(jù)進(jìn)行加密/解密,且選用電子密碼本(ECB)模式執(zhí)行,因此,在例程中僅添加上述①②③三項即可,加密/解密流程詳解見1.3.1小節(jié),接下來介紹軟件層面的應(yīng)用。
代碼中將實現(xiàn)數(shù)據(jù)加密/解密功能,取下列功能為例:
1)軟件復(fù)位
2)DES128 ECB
為縮短篇幅,不一一贅述所有算法形式,其余算法的使用方式可查閱相關(guān)參考手冊與庫文件,下面正式進(jìn)入軟件代碼部分講解。
1)軟件復(fù)位功能
首先設(shè)置CRYP各個寄存器的軟件復(fù)位值與偏移地址,如下所示,具體寄存器功能如手冊所述。
uint32_t TABLE_RESETREG[][2] = { {0x0000, 0x00000000}, {0x0004, 0x00000003}, {0x0008, 0x00000000}, {0x000C, 0x00000000}, {0x0010, 0x00000000}, {0x0014, 0x00000000}, {0x0018, 0x00000001}, {0x001C, 0x00000000}, {0x0020, 0x00000000}, {0x0024, 0x00000000}, {0x0028, 0x00000000}, {0x002C, 0x00000000}, {0x0030, 0x00000000}, {0x0034, 0x00000000}, {0x0038, 0x00000000}, {0x003C, 0x00000000}, {0x0040, 0x00000000}, {0x0048, 0x00000000}, {0x004C, 0x00000000}, }; TestStatus Test1() { int i; for (i=0; i{ if(readl((uint8_t *)CRYP + TABLE_RESETREG[i][0]) != TABLE_RESETREG[i][1]) { return FAILED; } } return PASSED; }
通過代碼判定基地址+偏移地址是否為CRYP相應(yīng)地址,一致則正確,不一致則錯誤。
1)DES128 ECB
根據(jù)手冊,首先設(shè)置以下向量組
①設(shè)置密鑰;
②設(shè)置初始向量組;
③設(shè)置明文文本;
④設(shè)置密文文本;
下面進(jìn)行代碼講解:
由上可知,實驗開始前需要先設(shè)定DES-KEY密鑰、初始向量IV_1、明文Plaintext等一系列數(shù)組。
由于我們添加了cks32f4xx_cryp_des.c,因此可直接調(diào)用明文加密函數(shù),并發(fā)送加密后的密文。
uart2_fputc(3, DESkey, 8); uart2_fputc(3, IV_1, 16); uart2_fputc(3, Plaintext, AES_TEXT_SIZE); for (j=0; j<4; j++) { DataType = 0x40 * j; /* Encrypt the plaintext message*/ if(MYCRYP_DES_ECB(MODE_ENCRYPT, DESkey, Plaintext, AES_TEXT_SIZE, Encryptedtext, DataType) != SUCCESS) { return FAILED; } uart2_fputc(3, Encryptedtext, AES_TEXT_SIZE); /* Decrypt the plaintext message */ if(MYCRYP_DES_ECB(MODE_DECRYPT,DESkey, Encryptedtext,AES_TEXT_SIZE,Decryptedtext, DataType) != SUCCESS) { return FAILED; } for (i=0; i{ if (Decryptedtext[i] != Plaintext[i]) { return FAILED; } }
上述代碼中的MYCRYP_DES_ECB()不僅可作為加密入口函數(shù),同樣可作為解密算法的入口函數(shù),參數(shù)如下所示:
ErrorStatus MYCRYP_DES_ECB (uint8_t Mode, uint8_t Key[8], uint8_t *Input, uint32_t Ilength, uint8_t *Output, uint16_t DataType)
對于各個參數(shù),可根據(jù)需求配置:
① Mode:根據(jù)需求選擇加密(MODE_ENCRYPT)、解密(MODE_DECRYPT)
② Key[8]:本例成為DES128 ECB算法,所以選擇DESkey
③*Input:輸入,根據(jù)功能設(shè)定,當(dāng)功能為加密時,輸入為明文;當(dāng)輸入為解密時,輸入為密文
④ Ilength:輸入的buffer長度,規(guī)定必須為8的倍數(shù)
⑤*Output:輸出,與第③條相反
⑥ DataType:默認(rèn)值
由于加密后的數(shù)據(jù)可通過DMA的突發(fā)模式進(jìn)行傳輸,因此也對DMA功能作簡要介紹,如下所示,DMA配置與常規(guī)無異,僅在一句函數(shù)上需注意,入口函數(shù)如下所示:
void DES_Encrypt_DMA (uint32_t AlgoMode, uint8_t InitVectors[16], uint8_t *Key, uint8_t *Input, uint32_t Ilength, uint8_t *Output, uint16_t DataType, DMA_InitTypeDef *DMA_In_InitStructure, DMA_InitTypeDef *DMA_Out_InitStructure)
該函數(shù)用于CRYP加密處理器加密/解密的DMA傳輸,函數(shù)的各個參數(shù)根據(jù)使用需求決定:
① AlgoMode:根據(jù)選定的模式設(shè)置,由于例程是DES128 ECB算法,因此,該參數(shù)設(shè)定為CRYP_AlgoMode_DES_ECB
② InitVectors[16]:初始向量設(shè)定
③*Key:秘鑰方式,上文中已講解,本次例程為DESkey
④*Input:輸入,上文已講解
⑤ Ilength:輸入的buffer長度
⑥*Output:輸出
⑦ DataType:默認(rèn)值
與加密函數(shù)類似,本節(jié)的DMA函數(shù)同樣分為加密和解密兩個過程,函數(shù)相應(yīng)更改*Input和*Output參數(shù)即可。
接下來講解main.c函數(shù),該函數(shù)相對不難。
在main.c中設(shè)定以下數(shù)組(具體數(shù)據(jù)如工程文件所示)
① DES密鑰;
②初始向量;
③明文/解密后的明文;
④加密計算后的密文;
Main.c函數(shù)如下所示:
int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(115200); NVIC_Config(); while(1) { CRYP_DeInit(); RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, DISABLE); RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); if(func[(0)]() == PASSED) { uart2_fputc(0, 0, 0); } else { uart2_fputc(0, 0, 0); } RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); if(func[(1)]() == PASSED) { uart2_fputc(0, 0, 0); } else { CKS_EVAL_LEDToggle(LED1); CKS_EVAL_LEDToggle(LED2); } RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE); if(func[(2)]() == PASSED) { uart2_fputc(0, 0, 0); } else { CKS_EVAL_LEDToggle(LED1); CKS_EVAL_LEDToggle(LED2); }
需注意的是,在驗證CRYP功能時,需要開啟相應(yīng)的總線時鐘。具體的代碼可詳見工程。
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_CRYP, ENABLE);
以上即為CRYP加密處理器模塊代碼的大致講解,具體代碼詳見相關(guān)工程。將代碼下載到相應(yīng)電路板后,通過軟件Debug的方式進(jìn)行驗證,驗證成功則跳轉(zhuǎn)到相關(guān)的功能PASS位置。最后可得到明文數(shù)據(jù)(Plaintext),并將其與解密后的數(shù)據(jù)(Decrytedtext)相比對,比對正確則成功,實驗結(jié)果如下圖所示:
(a)明文數(shù)據(jù)
(b)解密后的數(shù)據(jù)
到此,CRYP加密處理器講解完成,其他算法的使用詳見參考手冊與庫文件。
審核編輯:湯梓紅
-
處理器
+關(guān)注
關(guān)注
68文章
19804瀏覽量
233529 -
mcu
+關(guān)注
關(guān)注
146文章
17834瀏覽量
360378 -
fifo
+關(guān)注
關(guān)注
3文章
400瀏覽量
44615 -
CRYP
+關(guān)注
關(guān)注
0文章
5瀏覽量
2546
原文標(biāo)題:MCU微課堂|CRYP加密處理器
文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論