模逆運算器的制造方法
【專利摘要】一種模逆運算器,用于計算Z=Y(jié)-1mod X,包括:控制器、移位器、加減法運算器以及存儲器,其中:存儲器適于存儲第一操作數(shù)X、第二操作數(shù)Y、第一變量R以及第二變量S;移位器,位寬與M相等,適于以M為單位將X與Y進行移位操作;加減法運算器,位寬與M相等,適于對X中的M位數(shù)據(jù)與Y中的M位數(shù)據(jù)進行運算;控制器,包括適于緩存并更新X對應的二進制位長Xlen、Y對應的二進制位長Ylen的寄存器,控制器以M為單位從所述存儲器中讀取X以及Y,控制加減法運算器對X中的M位數(shù)據(jù)與Y中的M位數(shù)據(jù)進行運算,并將運算結(jié)果存儲至存儲器。采用所述模逆運算器,可以避免模逆運算參數(shù)過長導致的模逆運算器無法進行模逆運算的問題,擴展性較強。
【專利說明】X-H- XXL.'一 ? ΠΠ
豐旲逆35昇裔
技術領域
[0001]本發(fā)明涉及信息安全領域,尤其涉及一種模逆運算器。
【背景技術】
[0002]模逆運算廣泛應用在公鑰密碼體制中,例如,在RSA算法中的解密密鑰生成時應用到模逆運算,模逆運算也可以用于橢圓曲線密碼算法中的點加和倍點運算。
[0003]目前,求解模逆運算的方法主要包括模冪算法、擴展歐幾里得算法、二進制擴展歐幾里得算法等。
[0004]模冪算法以費馬小定理為基礎,將模逆運算轉(zhuǎn)換成模冪運算,但是模冪算法無法確定模逆結(jié)果是否存在。采用模乘器作為硬件運算單元,較為復雜且功耗較大。
[0005]擴展歐幾里得算法通過輾轉(zhuǎn)相除計算最大公因子求解模逆,當最大公因子為非I整數(shù)時無法獲取模逆的計算結(jié)果。采用除法器作為硬件運算單元,實現(xiàn)仍較為復雜。
[0006]二進制擴展歐幾里得算法將除法轉(zhuǎn)換成移位和加減法,降低了模逆運算器的設計復雜度。但是,在模逆運算的參數(shù)的位長較大時,模逆運算器的移位器與加減法運算器對應的位寬也要相應地增加。模逆運算器所能夠進行運算的數(shù)據(jù)長度受移位器的位寬及加減法運算器的位寬限制。在模逆運算的參數(shù)的位長超出移位器或加減法運算器的位寬時,模逆運算器無法進行模逆運算。
【發(fā)明內(nèi)容】
[0007]本發(fā)明實施例解決的是避免模逆運算參數(shù)過長導致的模逆運算器無法進行模逆運算的問題,擴展性較強。
[0008]為解決上述問題,本發(fā)明實施例提供一種模逆運算器,用于計算Z = Y 1H1d X,其中Z為所述模逆運算的結(jié)果,X為第一操作數(shù),Y為第二操作數(shù),包括:控制器、移位器、加減法運算器以及存儲器,其中:
[0009]所述存儲器,適于存儲第一操作數(shù)X、第二操作數(shù)Y、第一變量R以及第二變量S,其中:所述第一操作數(shù)X以及所述第二操作數(shù)Y均以預設的位長M為單位存儲在所述存儲器中,其中,M = NXL,N彡1,L為一個字的二進制長度;
[0010]所述移位器,位寬與M相等,適于以M為單位讀取所述存儲器中的第一操作數(shù)X與第二操作數(shù)Y,并將第一操作數(shù)X與第二操作數(shù)Y進行移位操作;
[0011 ] 所述加減法運算器,位寬與M相等,適于對第一操作數(shù)X中的M位數(shù)據(jù)與第二操作數(shù)Y中的M位數(shù)據(jù)進行運算;
[0012]控制器,包括寄存器,所述寄存器適于緩存并更新所述第一操作數(shù)X對應的二進制位長Hen、所述第二操作數(shù)Y對應的二進制位長Hen,所述控制器以M為單位從所述存儲器中讀取所述第一操作數(shù)X以及所述第二操作數(shù)Y,控制所述加減法運算器對第一操作數(shù)X中的M位數(shù)據(jù)與第二操作數(shù)Y中的M位數(shù)據(jù)進行運算,并將運算結(jié)果存儲至所述存儲器。
[0013]可選的,所述N= I。
[0014]可選的,所述加減法運算器適于從第一操作數(shù)X中選取一字節(jié)長度的連續(xù)數(shù)據(jù)與第二操作數(shù)Y中選取的對應的一字節(jié)長度的連續(xù)數(shù)據(jù)進行運算,在運算結(jié)果出現(xiàn)進位或借位時,將當前輸出的進位或借位作為下一字節(jié)數(shù)據(jù)的進位或借位的輸入。
[0015]可選的,在Hen不能被M整除時,將所述第一操作數(shù)X高位補符號位,將所述第一操作數(shù)X的位長Hen擴展至被M整除;在Hen不能被M整除時,將所述第二操作數(shù)Y高位補符號位,將所述第二操作數(shù)Y的位長Hen擴展至被M整除。
[0016]與現(xiàn)有技術相比,本發(fā)明實施例的技術方案具有以下優(yōu)點:
[0017]移位器在對X或Y進行移位操作時,以M為單位讀取X或Y的數(shù)據(jù)進行移位操作;加減法運算器在對X與Y進行加減法運算時,以M為單位將X中的M個數(shù)據(jù)與Y中的M個數(shù)據(jù)進行加減法運算。也就是說,在整個模逆運算的過程中,移位器和加減法運算器均是以M為單位進行運算,即移位器和加減法運算器的位寬僅為M即可實現(xiàn)對較長的X和Y進行運算,從而可以避免模逆運算參數(shù)過長導致的模逆運算器無法進行模逆運算的問題,擴展性較高。
【附圖說明】
[0018]圖1是本發(fā)明實施例中的一種模逆運算器的結(jié)構(gòu)示意圖。
【具體實施方式】
[0019]現(xiàn)有的二進制擴展歐幾里得算法將除法轉(zhuǎn)換成移位和加減法,降低了模逆運算器的設計復雜度,但是,在模逆運算的參數(shù)的位長較大時,二進制擴展歐幾里得模逆運算器的移位器與加減法運算器對應的位寬也要相應地增加。模逆運算器所能夠進行運算的數(shù)據(jù)長度受移位器的位寬及加減法運算器的位寬限制。在模逆運算的參數(shù)的位長超出移位器或加減法運算器的位寬時,模逆運算器無法進行模逆運算。
[0020]在本發(fā)明實施例中,移位器在對X或Y進行移位操作時,以M為單位讀取X或Y的數(shù)據(jù)進行以為操作;加減法運算器在對X與Y進行加減法運算時,以M為單位將X中的M個數(shù)據(jù)與Y中的M個數(shù)據(jù)進行加減法運算。也就是說,在整個模逆運算的過程中,移位器和加減法運算器均是以M為單位進行運算,即移位器和加減法運算器的位寬僅為M即可實現(xiàn)對較長的X和Y進行運算,從而可以避免模逆運算參數(shù)過長導致的模逆運算器無法進行模逆運算的問題,擴展性較高。
[0021]為使本發(fā)明實施例的上述目的、特征和優(yōu)點能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實施例做詳細的說明。
[0022]參照圖1,本發(fā)明實施例提供了一種模逆運算器,用于計算Z = Y 1H1d X,其中Z為所述模逆運算的結(jié)果,X為第一操作數(shù),Y為第二操作數(shù),包括:存儲器101、移位器102、加減法運算器103以及控制器104,其中:
[0023]存儲器101,適于存儲模逆運算中的第一操作數(shù)X、第二操作數(shù)Y,以及預設的第一變量R和第二變量S。
[0024]在具體實施中,可以將第一操作數(shù)X與第二操作數(shù)Y分別以預設的位長M為單位分段存儲在存儲器101中。在本發(fā)明實施例中,M可以為一個字的二進制長度的整數(shù)倍,SPM = NXL, L為一個字的二進制長度。可以理解的是,M也可以等于一個字的二進制長度的非整數(shù)倍,M可以根據(jù)實際的應用場景選取。
[0025]例如,M的值可以為16,即:將第一操作數(shù)X與第二操作數(shù)均以位長為16為單位,劃分成多個數(shù)據(jù)段并存儲在存儲器101中。又如,M的值可以為24,M的值也可以為32或其他值,此處不做贅述。
[0026]在實際應用中,在將第一操作數(shù)X以位長為M劃分成多個數(shù)據(jù)段并存儲在存儲器101中時,存在第一操作數(shù)X無法被M整除的情況。在本發(fā)明一實施例中,針對上述情況,對第一操作數(shù)X進行擴展,具體為:在第一操作數(shù)X的最高位處補符號位,使得經(jīng)過擴展的第一操作數(shù)X的位長被M整除。
[0027]相應地,在將第二操作數(shù)Y以位長為M劃分成多個數(shù)據(jù)段并存儲在存儲器101中時,存在第二操作數(shù)Y無法被M整除的情況。在本發(fā)明一實施例中,針對上述情況,對第二操作數(shù)Y進行擴展,具體為:在第二操作數(shù)Y的最高位處補符號位,使得經(jīng)過擴展的第二操作數(shù)Y的位長被M整除。
[0028]例如,第一操作數(shù)X 為 1010101101100011100110011001,M = 16,X 的位長為 28,無法被M= 16整除,因此,將第一操作數(shù)X擴展為00001010101101100011100110011001,擴展后的X的位長為32,則第一操作數(shù)X在存儲器101中的存儲方式為:0000101010110110,
0011100110011001ο
[0029]移位器102,位寬與M相等,以M為單位從存儲器101中讀取第一操作數(shù)X與第二操作數(shù)Y,對第一操作數(shù)X與第二操作數(shù)Y進行移位操作。
[0030]在本發(fā)明實施例中,移位器102的位寬可以與M相等。由于第一操作數(shù)X與第二操作數(shù)Y均以M為單位存儲在存儲器101中,因此移位器102可以一次從存儲器101中讀取M位數(shù)據(jù)。在進行左移時,例如,將第一操作數(shù)X左移NI位,移位器102讀取第一操作數(shù)X的最低數(shù)據(jù)段,將最低數(shù)據(jù)段低位補NI位0,高位的NI位數(shù)據(jù)補到其左邊數(shù)據(jù)段作為低位,最高數(shù)據(jù)段的高NI位舍棄,得到左移NI位的操作數(shù)X。
[0031]例如,第一操作數(shù)X在存儲器101中的存儲方式為:0000101010110110,0011100110011001ο控制器104向移位器102發(fā)送將第一操作數(shù)X左移4位的操作指令。移位器102接收到左移操作指令后,將最低16位數(shù)據(jù)左移4位,得到1001100110010000,0011與高位數(shù)據(jù)段進行結(jié)合,最高4位0000舍棄,得到左移4位的第一操作數(shù)X為:10101011011000111001100110010000。
[0032]加減法運算器103,位寬與M相等,以M為單位從存儲器101中讀取第一操作數(shù)X與第二操作數(shù)Y,并對讀取出的第一操作數(shù)X中的M位數(shù)據(jù)與第二操作數(shù)Y中的M位數(shù)據(jù)進行加法運算或減法運算。
[0033]在本發(fā)明實施例中,需要注意的是,加減法運算器103在對第一操作數(shù)X與第二操作數(shù)Y進行加法運算時,例如,將第一操作數(shù)X與第二操作數(shù)Y相加,先按照預先設定的加法規(guī)則將第一操作數(shù)X與第二操作數(shù)Y高位對齊或低位對齊。將第一操作數(shù)X與第二操作數(shù)Y對齊部分的最低M位數(shù)據(jù)進行相加,在進行相加的過程中產(chǎn)生進位時,將產(chǎn)生的進位作為相鄰高位M位數(shù)據(jù)加法運算的進位輸入。
[0034]加減法運算器103在對第一操作數(shù)X與第二操作數(shù)Y進行減法運算時,例如,將第一操作數(shù)與第二操作數(shù)Y相減,先按照預先設定的減法規(guī)則將第一操作數(shù)X與第二操作數(shù)Y高位對齊或低位對齊。將第一操作數(shù)X與第二操作數(shù)Y對齊部分的最低M位數(shù)據(jù)進行相減,在進行相減的過程中產(chǎn)生借位時,將產(chǎn)生的借位作為相鄰高位M位數(shù)據(jù)減法運算的借位輸入。
[0035]例如,在M = L時,即M的長度為一個字的位長時,M = 16。X為位長為128位,Y的位長為64位,加減法運算器103將第一操作數(shù)X與第二操作數(shù)Y高位對齊相加,即第一操作數(shù)X和第二操作數(shù)Y之間高位對齊部分的位長為64位。選取第一操作數(shù)X的第65?80位與第二操作數(shù)Y的第I?16位進行加法運算,在產(chǎn)生進位時,將進位作為第一操作數(shù)第81?96位與第二操作數(shù)第17?32位相減運算時的進位輸入。
[0036]相類似的,第一操作數(shù)X與第二操作數(shù)Y之間的相減運算的過程可以參照上述示例,此處不做贅述。
[0037]控制器104,以M為單位從存儲器101中以M為單位從讀取第一操作數(shù)X以及第二操作數(shù)Y,控制移位器102將第一操作數(shù)X或第二操作數(shù)Y進行移位操作,控制加減法運算器103對第一操作數(shù)X中選取的M位數(shù)據(jù)與第二操作數(shù)Y中選取的對應的M位數(shù)據(jù)進行加減法運算,并將加減法運算器103得到的運算結(jié)果存儲至存儲器101。
[0038]在本發(fā)明實施例中,控制器104中可以設置有寄存器??梢酝ㄟ^寄存器緩存第一操作數(shù)X對應的二進制位長Hen以及第二操作數(shù)Y對應的二進制位長Hen。在模逆運算的過程中,當Hen或Hen發(fā)送改變時,寄存器將存儲的Hen或Hen更新為更改以后的Xlen 或 Ylen0
[0039]在本發(fā)明實施例中,采用上述模逆運算器計算Z = Y 1H1d X時,可以通過采用將第一操作數(shù)X與第二操作數(shù)Y左移之后進行運算來實現(xiàn),也可以通過采用將第一操作數(shù)X與第二操作數(shù)Y右移之后進行運算來實現(xiàn)。
[0040]下面分別對采用左移算法進行模逆運算以及采用右移算法進行模逆運算進行說明。
[0041]1、米用右移算法進彳丁模逆運算。
[0042]首先,對采用右移算法進行模逆運算的基本原理進行說明。
[0043]第一操作數(shù)X的位長為Xlen,第二操作數(shù)Y的位長為Ylen,設定第一變量R = 0,以及第二變量S = 10
[0044](1.1)在Xlen彡Hen時,計算X模Y。將Y右移nl位至最低位為I,將第二變量S更新為S = S/2n1。將X右移ml位至最低位為1,將第一變量R更新為R = R/2m1。
[0045]在X為正數(shù)時,將X與Y低位對齊做減法,將得到的差值作為更新后的X值,并將Xlen更新為Hen = Xlen-mlo將第一變量R與第二變量S低位對齊做加法,得到的和值作為更新后的第一變量R。
[0046]在X為負數(shù)時,將X與Y低位對齊做加法,將得到的和值作為更新后的X值,并將Xlen更新為Hen = Xlen-mlo將第一變量R與第二變量S低位對齊做減法,得到的差值作為更新后的第一變量R。
[0047](1.2)在Hen彡Xlen時,計算Y模X。將X右移m2位至最低位為I,將第一變量R更新為R = R/2m2。將Y右移n2位至最低位為1,將第二變量S更新為S = S/2n2。
[0048]在Y為正數(shù)時,將Y與X低位對齊做減法,將得到的差值作為更新后的Y值,并將Ylen更新為Hen = Ylen-n20將第二變量S與第一變量R低位對齊做加法,得到的和值作為更新后的第二變量S。
[0049]在Y為負數(shù)時,將Y與X低位對齊做加法,將得到的和值作為更新后的Y值,并將Ylen更新為Hen = Ylen-n20將第二變量S與第一變量R低位對齊做減法,得到的差值作為更新后的第二變量S。
[0050]重復上述步驟(1.1)和步驟(1.2),直至更新后的X = O或更新后的Y = O時,停止模逆運算。
[0051]在更新后的X = O且更新后的Y = I時,模逆運算的結(jié)果為更新后的第二變量S ;在更新后的X = I且更新后的Y = O時,模逆運算的結(jié)果為X的初始值與更新后的第一變量R之差;在更新后的X與更新后的Y其中之一等于O而另一個不等于I時,所述模逆運算的結(jié)果不存在。
[0052]下面以X= 17,Y= 13為例。分別將X和Y轉(zhuǎn)換成對應的二進制數(shù),則X= 10001,Y= IlOlo初始化第一變量R = 0,第二變量S = 1,初始的)(len = 5,Ylen = 4。
[0053]X的最低位為1,Y的最低位為1,即X和Y均無需進行右移操作,ml = 0,nl = O。Xlen > Ylen, X與Y均為整數(shù),將X和Y低位對齊做減法,得到的差值作為更新后的X值,即 X = X-Y = 10001-1101 = OOlOOo Xlen 更新為 Xlen = Xlen-ml = 5。去除更新后的 X的符號位,則X = 100,對應的,Xlen更新為)(len = 3。
[0054]由于ml = 0,nl = 0,因此,更新后的S = S/2n1= 1,更新后的R = R/2 m1= O。將R與S低位對齊相加,得到的和值作為更新后的R。更新后的R = R+S = 0+1 = I。
[0055]更新后X的位長Xlen = 3,Ylen = 4,即Hen > Xlen0將X右移m2位至最低位為1,由于更新后的X = 100,則X的右移位數(shù)m2 = 2。有上一步驟可知,當前R = I。X右移2位后,對R進行更新,更新后的R = R/22。由于R = 1,除2除不盡,加上模值除以2,R=(1+10001)/2 = 1001,R = (1001+10001)/2 = 1101,即為更新后的 R0
[0056]Y的最低位為1,因此Y右移位數(shù)n2 = O。X、Y均為正數(shù),將Y與X低位對齊做減法,得到更新后的Y,更新后的Y = Y-X= 1101-1 = IlOOo將X右移2位時更新的R與S低位對齊相加,得到更新后的S = S+R = 1+1101 = 1110。
[0057]更新后的Y= 1100,將Y右移n2位至最低位為1,η2 = 2,得到右移后的Y = 11。更新后的S = S/22,S= 1110,最低位為0,因此除以2可以除盡,S = S/2= 111。最低位為1,除2除不盡,加上模值除以2,則更新后的S = (S+1000D/2 = 1100。
[0058]Y位長大于X位長,且X、Y均為正數(shù),將Y與X低位對齊做減法,更新后的Y = Y-X=11-1 = 10,更新后的 S = S+R = 1100+1101 = 10001。
[0059]更新后的Y的最低位為0,將Y右移η2位至最低位為1,η2 = I,得到右移后的Y=1。Y 右移后,S 更新為 S= (10001+10001)/2 = 100lo
[0060]右移后Y= LX = I,二者位長相等,且X、Y均為正數(shù),將Y與X低位對齊相減,得到更新后的 Y = Y-X= 1-1 = Oo 更新后的 S = S+R = 10001+1101 = 11110。
[0061]由于更新后的Y = O,上述模逆運算的計算過程結(jié)束,此時更新后的X = 1,更新后的Y = 0,模逆運算結(jié)果存在。模逆運算結(jié)果等于X的初始值與更新后的R之差,即模逆運算結(jié)果Z = 10001-1101 = 100,轉(zhuǎn)換成十進制數(shù)即Z = 4。
[0062]本發(fā)明上述實施例中提供的右移算法的距離僅為說明如何具體地采用右移算法計算模逆運算。在第一操作數(shù)X和第二操作數(shù)Y的位長較大時,也可以采用本發(fā)明上述實施例中提供的右移算法,此處不做贅述。
[0063]結(jié)合本發(fā)明上述實施例中提供的模逆運算器,以及采用右移算法進行模逆運算,以下對本發(fā)明實施例中提供的模逆運算器在進行右移操作時的執(zhí)行過程進行說明。
[0064]控制器104包括寄存器,在寄存器中存儲并更新X對應的二進制位長Hen和Y對應的二進制位長Hen,當Xlen彡Ylen時,計算X模Y ;當Hen彡Xlen時,計算Y模X。X和Y、R和S均以字為單位存儲在存儲器101中。
[0065]以計算X模Y為例進行說明。
[0066]首先,將操作數(shù)Y右移至最低位為1:從存儲器101中讀取Y最低字,判斷出Y的右移位數(shù),按照從低位到高位的順序依次從存儲器101中讀取Y的所有字,送入移位器102中進行移位,并將移位結(jié)果存儲至存儲器101。
[0067]然后,從存儲器101中讀取X最低字,根據(jù)X與Y的位長、X的符號位以及X的最低字判斷X的右移位數(shù)和操作,包括:
[0068](1.3) tailIen = wordlen,tailIen 表示為 X 最低字后綴 O 的個數(shù),wordlen 表示為字長。
[0069]Xlen-Ylen彡taillen時,以字為單位按照從低位到高位的順序依次從存儲器101中讀取X,送入移位器102中,以shiftsize = taillen位進行右移,移位結(jié)果寫入到存儲器101中作為更新后的X,再從存儲器101中讀取更新后的X的最低字進行判斷,以獲取X的右移位數(shù)。
[0070]X為正數(shù),且Xlen-Ylen < taillen時,X模Y計算過程結(jié)束,進入Y模X計算,X右移位數(shù) shiftsize = taillen。
[0071]X 為負數(shù),且 Xlen-Ylen < taillen 時,X 右移位數(shù) shiftsize = Xlen-Ylenj^S移后的X與右移后的Y低位對齊做加法。
[0072](1.4) taillen < wordlen0
[0073]在X 為正數(shù),且 Xlen-Ylen ^ taillen 時,X 右移位數(shù) shiftsize = taillen,將右移后的X與右移后的Y低位對齊做減法;
[0074]在X 為負數(shù),且 Xlen-Ylen ^ taillen 時,X 右移位數(shù) shiftsize = taillen,將右移后的X與右移后的Y低位對齊做加法;
[0075]在X為正數(shù),且Xlen-Ylen < taillen時,X模Y計算過程結(jié)束,進入Y模X計算,X 右移位數(shù) shiftsize = taillen ;
[0076]在X 為負數(shù),且 Xlen-Ylen < taillen 時,X 右移位數(shù) shiftsize = Xlen-Ylen,將右移后的X與右移后的Y低位對齊做加法。
[0077]在X與Y進行加法運算或減法運算時,以字為單位從存儲器101中讀取右移后的X和右移后的Y,移位后X多出移位后Y的高位結(jié)果直接寫入到存儲器101,移位后的X與Y字長相等的低位部分送入加減法運算器103,進行相應的加法運算或減法運算,并將低位運算結(jié)果存儲至存儲器101。將右移后的X的高位結(jié)果與低位運算結(jié)果合并,即可得到更新后的X。
[0078]可以理解的是,在實際應用中,還存在X的字長與Y字長相等的情況,此時,更新后的X為加法運算或減法運算的結(jié)果。在計算完成后,可以將Hen更新為)(len =Xlen-shiftsize0
[0079]R更新為R/2shlftslze,在控制器104中設置計數(shù)器cnt = shiftsize。從存儲器101中讀取R的最低字,在最低字的最低位為O時,以字為單位按照從低位到高位的順序從存儲器101中讀取R,送入移位器102中右移I位,移位結(jié)果寫入存儲器101中作為新的R值,計數(shù)器cnt更新為cnt = cnt-lo在最低字的最低位為I時,以字為單位按照從低位到高位的順序從存儲器101中讀取R和X的初始值,送入加減法運算器103進行加法運算。將加法運算的結(jié)果送入至移位器102中右移I位,移位結(jié)果寫入存儲器101中作為新的R值,計數(shù)器cnt更新為cnt = cnt-lo經(jīng)過shiftsize次運算之后,得到R/2shlftslze,即為最終的R0
[0080]將R和S進行相關計算。以字為單位按照從低位到高位的順序依次從存儲器101中讀取R和S并送入至加減法運算器103,將二者低位對齊進行相應的加減法運算,將得到的和值作為更新后的R。
[0081]在計算過程中,X為位長Hen不斷減小,直至求得X模Y。Y模X可以采用本發(fā)明上述實施例中相同的運算方法。經(jīng)過若干次運算結(jié)果之后,X和Y中的其中一個值更新為O。
[0082]在更新后的X = O且更新后的Y = I時,模逆運算的結(jié)果為更新后的第二變量S ;在更新后的X = I且更新后的Y = O時,模逆運算的結(jié)果為X的初始值與更新后的第一變量R之差;在更新后的X與更新后的Y其中之一等于O而另一個不等于I時,所述模逆運算的結(jié)果不存在。
[0083]2、米用左移算法進彳丁模逆運算
[0084]首先,對采用左移算法進行模逆運算的基本原理進行說明。
[0085]第一操作數(shù)X的位長為Xlen,第二操作數(shù)Y的位長為Ylen,設定第一變量R,以及第二變量S。
[0086](2.1)在 Xlen 彡 Ylen 時,計算 X 模 Y。
[0087]在X為正數(shù)時,將X左移NI位至最高位為1,X的低位補NI位無效O ;將左移后的X與Y高位對齊相減,將得到的差值的后NI位去除,得到的結(jié)果作為更新后的X ;將第一變量R與左移OClen-Ylen)位的第二變量S低位對齊相加,并將得到的和值作為更新后的第一變量R。
[0088]在本發(fā)明實施例中,需要注意的是,在NI大于Hen-Ylen時,X左移NI位后的值小于Y,X模Y計算結(jié)束,若X = O,計算結(jié)束,若X>0,進行Y模X計算。
[0089]在X為負數(shù)時,將X左移N2位,X的低位補N2位無效O ;將左移后的X與Y高位對齊相加,將得到的和值的后N2位去除,得到的結(jié)果作為更新后的X ;將第一變量R與左移(Xlen-Ylen)位的第二變量S低位對齊相減,并將得到的和值作為更新后的第一變量R。其中,N2為:X最高位的O前的符號位的個數(shù)N3與(Xlen-Ylen)之間的最小值。
[0090](2.2)在 Hen 彡 Xlen 時,計算 Y 模 X。
[0091 ] 在Y為正數(shù)時,將Y左移Ml位至最高位為I,低位補Ml位無效0,將左移后的Y與X高位對齊相減,將差值的后Ml位去除,作為更新后的Y ;將第二變量S與左移(Hen-Xlen)位的第一變量R低位對齊相加,并將得到的和值作為更新后的第二變量S。
[0092]在Y為負數(shù)時,將Y左移M2位,低位補M2位無效0,將左移后的Y與X高位對齊相加,將得到的和值的后M2位去除,作為更新后的Y ;將第二變量S與左移(Hen-Xlen)位的第一變量R低位對齊相減,得到的差值作為更新后的第二變量S ;其中,M2為:Y最高位的O前的符號位的個數(shù)M3與(Hen-Xlen)之間的最小值。
[0093]重復上述步驟(2.1)和步驟(2.2),直至更新后的X = O或更新后的Y = O時,停止模逆運算。
[0094]在更新后的X = O且更新后的Y = I時,模逆運算的結(jié)果為更新后的第二變量S ;在更新后的X = I且更新后的Y = O時,模逆運算的結(jié)果為X的初始值與更新后的第一變量R之差;在更新后的X與更新后的Y其中之一等于O而另一個不等于I時,所述模逆運算的結(jié)果不存在。
[0095]下面以X值為17、Y值為13為例,對本發(fā)明上述實施例中提供的模逆運算方法進行說明。
[0096]計算Z = 13 ^ο(117ο
[0097]分別將X和Y以二進制數(shù)表示,則X = 10001,Υ = 1101。設定第一變量R = 0,第二變量S = 1從上述內(nèi)容可知,X對應的Xlen = 5,Y對應的Hen = 4。
[0098]Xlen > Ylen,且Xlen-Ylen = 1,X為正數(shù)且X的第一位為1,則不將X左移,即X左移的位數(shù)為O。將X與Y高位對齊相減,將得到的差值作為更新后的X,即更新后的X =10001-11010 = -1Olllo
[0099]第一變量R與左移I位的第二變量S相加,將得到的和值作為更新后的R,即更新后的R = 10。
[0100]更新后的X = -10111為負數(shù),將X左移N2位,N2為X最高位的O前的符號位的個數(shù)N3與OClen-Ylen)之間的最小值。X最高位的O前的符號位的個數(shù)N3 = 1,(Xlen-Ylen)=1,因此N2 = 1,即將X左移I位,低位補I位無效0,則左移后的X = -01110,由于最低位的O為無效0,則左移后的X對應的Hen = 4。
[0101]更新后的X對應的Hen與Hen相等,Xlen-Ylen = 0。將Y與X相加,得到的和值為-01110+11010 = OlOOOo將和值結(jié)果的最后I位去除,作為更新后的X,即更新后的X=OlOOo
[0102]第一變量R與左移O位的第二變量S相減,并將得到的差值作為更新后的R,即更新后的R = 10-1 = 10
[0103]Y = 1101,更新后的X = 0100,X的第一位為符號位,因此X = 100。由于Xlen不包括X的符號位,因此Xlen = 3,即Hen大于更新后的X對應的Xlen,Ylen-Xlen =UY為整數(shù)且Y的第一位為1,Y不左移。將Y與X高位對齊相減,將得到的差值作為更新后的Y,即更新后的 Y = 1101-1000 = OlOlo
[0104]將更新后的R左移I位,并與第二變量S相加,得到更新后的第二變量S = 1+10=11。
[0105]將更新后的Y最高位為0,Y為整數(shù),將Y左移I位至最高位為1,低位補I位無效0,左移后的Y = 1010。由于左移后的Y的最低位的O為無效0,則Y對應的Hen = 3,Χ =100,對應的 Xlen = 3,即 Xlen = Ylen0
[0106]將Y與X高位對齊相減,得到的差值為1010-1000 = 10,將差值的最低位的O去除,得到的值為1,即更新后的Y= I。將更新后的第二變量S與更新后的第一變量R相加,S= 11,R= I,得到更新后的第二變量S = 11+1 = 100。
[0107]更新后的Y = 1,X = 100,即X對應的位長Xlen = 3,Y對應的位長Hen = 1,Xlen-Ylen = 2。將X與Y高位對齊相減,得到的差值為100-100 = 0,即為更新后的X值。將第一變量R與左移2位的第二變量S相加,得到的和值為更新后的第一變量R = 1+10000=100lo
[0108]此時,更新后的X = O,更新后的Y = I,模逆運算結(jié)束。
[0109]從上述內(nèi)容中可知,在更新后的X = O且更新后的Y = I時,模逆運算的結(jié)果為更新后的第二變量S。第二變量S = 100,轉(zhuǎn)換成十進制數(shù)為4。即13 1H1dn = 4。
[0110]代入驗證:13X4 = 52,對17求模得到的結(jié)果為1,即本發(fā)明上述實施例提供的模逆運算方法求得的結(jié)果正確。
[0111]結(jié)合本發(fā)明上述實施例中提供的模逆運算器,以及采用左移算法進行模逆運算,以下對本發(fā)明實施例中提供的模逆運算器在進行左移操作時的執(zhí)行過程進行說明。
[0112]控制器104包括寄存器,在寄存器中存儲并更新X對應的二進制位長Hen和Y對應的二進制位長Hen,當Xlen彡Ylen時,計算X模Y ;當Hen彡Xlen時,計算Y模X。X和Y均以字為單位存儲在存儲器101中。X和Y、R和S均以字為單位存儲在存儲器101中。
[0113]以計算X模Y為例進行說明。
[0114]首先,將操作數(shù)Y左移至最高位為1:從存儲器101中讀取Y的最高字,判斷出Y所需進行左移的位數(shù),按照從低位到高位的順序依次從存儲器101中讀取Y的所有字,送入移位器102中進行移位,并將移位結(jié)果存儲至存儲器101。
[0115]然后,從存儲器101中讀取X最高字,根據(jù)X與Y的位長、X的符號位以及X的最高字判斷X的左移位數(shù)和操作,包括:
[0116](2.3) leadlen = wordlen,在X為正數(shù)時,Ieadlen表示為X最高字前綴O的個數(shù),在X為負數(shù)時,Ieadlen表示為X最高字前綴I的個數(shù),wordlen表示為字長。
[0117]Xlen-Ylen彡Ieadlen時,以字為單位按照從低位到高位的順序依次從存儲器101中讀取X,送入移位器102中,以shiftsize = leadlen位進行左移,移位結(jié)果寫入到存儲器101中作為更新后的X,再從存儲器101中讀取更新后的X的最高字進行判斷,以獲取X的左移位數(shù)。
[0118]X為正數(shù),且Xlen-Ylen < leadlen時,X模Y計算過程結(jié)束,進入Y模X計算,X左移位數(shù) shiftsize = leadlen。
[0119]X 為負數(shù),且 Xlen-Ylen < leadlen 時,X 左移位數(shù) shiftsize = Xlen-Ylen,將左移后的X與左移后的Y高位對齊做加法。
[0120](2.4) leadlen < wordlen。
[0121]在X 為正數(shù),且 Xlen-Ylen ^ leadlen 時,X 左移位數(shù) shiftsize = leadlen,將左移后的X與左移后的Y尚位對齊做減法;
[0122]在X 為負數(shù),且 Xlen-Ylen ^ leadlen 時,X 左移位數(shù) shiftsize = leadlen,將左移后的X與左移后的Y高位對齊做加法。
[0123]在X為正數(shù),且Xlen-Ylen < leadlen時,X模Y計算過程結(jié)束,進入Y模X計算,X 左移位數(shù) shiftsize = leadlen。
[0124]在X 為負數(shù),且 Xlen-Ylen < leadlen 時,X 左移位數(shù) shiftsize = Xlen-Ylenj^左移后的X與左移后的Y尚位對齊做加法。
[0125]在X與Y進行加法運算或減法運算時,以字為單位從存儲器101中讀取左移后的X和左移后的Y,移位后X多出移位后Y的低位結(jié)果直接寫入到存儲器101,移位后的X與Y字長相等的高位部分送入加減法運算器103,進行相應的加法運算或減法運算,并將高位運算結(jié)果存儲至存儲器101。將左移后的X的低位結(jié)果與高位運算結(jié)果合并,即可得到更新后的X。
[0126]可以理解的是,在實際應用中,還存在X的字長與Y字長相等的情況,此時,更新后的X為加法運算或減法運算的結(jié)果。在計算完成后,可以將Hen更新為)(len =Xlen-shiftsize0
[0127]然后,R與左移O(Ien-Ylen)后的S低位對齊做加法或減法。
[0128]在本發(fā)明一實施例中,R值的計算與更新步驟為:控制器104以字為單位按照從低位到高位的順序從存儲器101中讀取R和S,將S送入至移位器102。移位器102將S左移(Xlen-Ylen)位,加減法運算器103將R與左移后的S低位對齊相減,得到的差值作為更新后的R。
[0129]在本發(fā)明另一實施例中,在計算X模Y的過程中,預先設置第三變量QS,第三變量QS存儲在存儲器101中,且第三變量QS的初始值為O。在每次X左移NI位與Y高位對齊相加之后,從存儲器101中讀取第三變量QS以及第二變量S。將第三變量QS送入至移位器102中左移NI位,將移位結(jié)果送入至加減法運算器103。加減法運算器103將左移后的第三變量QS與第二變量S低位對齊并相減,得到的差值作為更新后的第三變量QS。在X模Y計算結(jié)束時,從存儲器101中讀取第一變量R和更新后的第三變量QS,送入至加減法運算器103中,將第一變量R與更新后的第三變量QS低位對齊相減,得到的差值作為更新后的第一變量R。
[0130]由此可見,移位器在對X或Y進行移位操作時,以M為單位讀取X或Y的數(shù)據(jù)進行以為操作;加減法運算器在對X與Y進行加減法運算時,以M為單位將X中的M個數(shù)據(jù)與Y中的M個數(shù)據(jù)進行加減法運算。也就是說,在整個模逆運算的過程中,移位器和加減法運算器均是以M為單位進行運算,即移位器和加減法運算器的位寬僅為M即可實現(xiàn)對較長的X和Y進行運算,從而可以避免模逆運算參數(shù)過長導致的模逆運算器無法進行模逆運算的問題,擴展性較高。
[0131]雖然本發(fā)明披露如上,但本發(fā)明并非限定于此。任何本領域技術人員,在不脫離本發(fā)明的精神和范圍內(nèi),均可作各種更動與修改,因此本發(fā)明的保護范圍應當以權(quán)利要求所限定的范圍為準。
【主權(quán)項】
1.一種模逆運算器,用于計算Z = Y 1H1d X,其中Z為所述模逆運算的結(jié)果,X為第一操作數(shù),Y為第二操作數(shù),其特征在于,包括:控制器、移位器、加減法運算器以及存儲器,其中: 所述存儲器,適于存儲第一操作數(shù)X、第二操作數(shù)Y、第一變量R以及第二變量S,其中:所述第一操作數(shù)X以及所述第二操作數(shù)Y均以預設的位長M為單位存儲在所述存儲器中,其中,M = NXL,N彡1,L為一個字的二進制長度; 所述移位器,位寬與M相等,適于以M為單位讀取所述存儲器中的第一操作數(shù)X與第二操作數(shù)Y,并將第一操作數(shù)X與第二操作數(shù)Y進行移位操作; 所述加減法運算器,位寬與M相等,適于對第一操作數(shù)X中的M位數(shù)據(jù)與第二操作數(shù)Y中的M位數(shù)據(jù)進行運算; 控制器,包括寄存器,所述寄存器適于緩存并更新所述第一操作數(shù)X對應的二進制位長Hen、所述第二操作數(shù)Y對應的二進制位長Hen,所述控制器以M為單位從所述存儲器中讀取所述第一操作數(shù)X以及所述第二操作數(shù)Y,控制所述加減法運算器對第一操作數(shù)X中的M位數(shù)據(jù)與第二操作數(shù)Y中的M位數(shù)據(jù)進行運算,并將運算結(jié)果存儲至所述存儲器。2.如權(quán)利要求1所述的模逆運算器,其特征在于,所述N= I。3.如權(quán)利要求2所述的模逆運算器,其特征在于,所述加減法運算器適于從第一操作數(shù)X中選取一字節(jié)長度的連續(xù)數(shù)據(jù)與第二操作數(shù)Y中選取的對應的一字節(jié)長度的連續(xù)數(shù)據(jù)進行運算,在運算結(jié)果出現(xiàn)進位或借位時,將當前輸出的進位或借位作為下一字節(jié)數(shù)據(jù)的進位或借位的輸入。4.如權(quán)利要求1所述的模逆運算器,其特征在于,在Hen不能被M整除時,將所述第一操作數(shù)X高位補符號位,將所述第一操作數(shù)X的位長Hen擴展至被M整除;在Hen不能被M整除時,將所述第二操作數(shù)Y高位補符號位,將所述第二操作數(shù)Y的位長Hen擴展至被M整除。
【文檔編號】G06F7/72GK105988771SQ201510096487
【公開日】2016年10月5日
【申請日】2015年3月4日
【發(fā)明人】劉凱, 陸繼承, 趙曉冬, 王宇
【申請人】上海復旦微電子集團股份有限公司