填充操作状态确定的制作方法

文档序号:17814523发布日期:2019-06-05 21:27阅读:374来源:国知局
填充操作状态确定的制作方法

一个或多个方面一般涉及计算环境内的处理,尤其与安全消息传输相关联的处理。

电子信息处理上下文中的安全消息传输涉及消息的加密和解密,以及认证。发送方在传输之前对消息进行加密,以确保对加密消息的检查不会向第三方显示其真实内容。另一方面,接收者对消息进行解密以显示原始内容。此外,消息验证确保由发送方提供的消息的内容在传输期间不被意外或恶意更改。因此,接收到的消息实际上与被发送的消息相同。

通常通过检查消息的位并使用散列(hashing)算法从所检查的位中生成消息摘要(有时称为认证标签,或简称为散列)来执行认证。散列算法的安全强度(即,算法对碰撞、原像攻击和第二原像攻击的抵抗力)由所生成的消息摘要的大小来指示。

国家标准技术局(nist,美国)采用用于两类安全散列算法(sha-1(摘要长度为160位)和sha-2(摘要长度为224、256、384和512位))(及其组合)的标准。

sha-1和sha-2算法开始于确定性非零散列标签(被称为初始链接值(icv)),其由消息的每个连续块(消息块的大小为64或128字节)重复置换。每个置换生成输出链接值(ocv),其用作后续置换的icv。当处理完所有完整的消息块时,最终的短块(如果没有短块则为空块)被填充直到完整的消息长度,最后的块用于最后一次置换icv以生成结果消息摘要(即标签)。对消息执行一次填充。

由于填充将被执行一次,因此促进与此类填充相关联的处理。



技术实现要素:

通过提供用于促进计算环境中的处理的计算机程序产品,克服了现有技术的缺点并提供了额外的优点。计算机程序产品包括存储介质,存储介质可由处理电路读取并存储用于由处理电路执行以执行方法的指令。方法例如包括获得要被执行的指令。指令将被用于生成消息的消息摘要。执行包括检查指令的填充状态控件以确定是否已对该消息执行填充。基于该检查指示已执行填充,执行第一动作。基于该检查指示未执行填充,执行与第一动作不同的第二动作。

促进与认证相关联的处理,从而改进计算环境内的处理。

在一个实施例中,第一动作包括执行扩展输出函数处理以执行与消息摘要相关联的进一步处理。执行扩展输出函数处理例如包括重散列(re-hashing)消息摘要的至少一部分以生成附加输出。

此外,在一个实施例中,第二动作包括执行对消息的至少一部分的填充以形成选择大小的消息块。执行填充例如包括将填充位添加到选择的消息的至少一部分的位置。在一个实施例中,第二动作还包括设置指示已对消息执行填充的填充状态控件。填充状态控件例如位于由指令使用的寄存器中。在另一示例中,填充状态控件位于可由指令访问的存储器中。

此外,在一个实施例中,执行还包括基于填充状态控件指示填充已经被执行并且基于指令开始执行来确定消息的长度是否为非零,并且如果为零,则指示异常。

作为一个示例,指令是计算最后消息摘要(computelastmessagedigest)指令,其用于处理消息的一个或多个最后块以生成要在消息的认证中使用的消息摘要。

消息可被存储在存储器中,并且指令提供在存储器中的地址以定位消息。

本文还描述并要求保护与一个或多个方面有关的方法和系统。此外,本文还描述并可要求保护与一个或多个方面有关的服务。

通过本文描述的技术实现了额外的特征和优点。本文详细描述了其它实施例和方面,并且这些实施例和方面被认为是所要求保护的方面的一部分。

附图说明

在说明书结尾的权利要求中作为示例特别指出并清楚地要求保护一个或多个方面。通过结合附图的以下详细描述,一个或多个方面的前述和目的、特征和优点是显而易见的,在附图中:

图1a描绘了结合和使用本发明的一个或多个方面的计算环境的一个示例;

图1b描绘了图1a中的处理器的进一步细节;

图2a描绘了结合和使用本发明的一个或多个方面的计算环境的另一示例;

图2b描绘了图2a中的存储器的进一步细节;

图3a描绘了根据本发明的一方面的计算最后消息摘要指令的格式的一个实施例;

图3b描绘了根据本发明的一方面的由图3a的计算最后消息摘要指令的一个或多个方面使用的通用寄存器(通用寄存器0(gr0))的内容的一个示例;

图3c描绘了根据本发明的一方面的由图3a的计算最后消息摘要指令使用的另一通用寄存器(通用寄存器1(gr1))的内容的一个示例;

图3d描绘了根据本发明的一方面的由图3a的计算最后消息摘要指令在一个或多个方面使用的寄存器r1的内容的一个示例;

图3e描绘了根据本发明的一方面的由图3a的计算最后消息摘要指令在一个或多个方面中使用的寄存器r1+1的内容的一个示例;

图3f描绘了根据本发明的一方面的由图3a的计算最后消息摘要指令在一个或多个方面中使用的寄存器r2的内容的一个示例;

图3g描绘了根据本发明的一方面的由图3a的计算最后消息摘要指令在一个或多个方面中使用的寄存器r2+1的内容的一个示例;

图3h描绘了根据本发明的一方面的由图3a的计算最后消息摘要指令在一个或多个方面中使用的参数块的一个示例;

图4描绘了根据本发明的一方面的由计算最后消息摘要指令使用的填充操作的一个示例;

图5描绘了根据本发明的一方面的图3a的计算最后消息摘要指令的扩展输出函数处理的一个示例;

图6描绘了根据本发明的一方面的由图3a的计算最后消息摘要指令进行填充的另一示例;

图7描绘了根据本发明的一方面的图3a的计算最后消息摘要指令的扩展输出函数处理的另一实施例;

图8描绘了根据本发明的一方面的使用填充状态控件的一个示例;以及

图9a-9b描绘了根据本发明的一方面的促进计算环境中的包括执行使用填充操作的指令的处理的一个示例。

具体实施方式

根据一个或多个方面,提供了用于确定是否已对指令(诸如生成消息摘要的可中断指令)执行填充操作的能力,以确定如何继续处理。在一个示例中,此类填充操作由用于生成消息摘要的计算最后消息摘要指令执行,如下所述。尽管本文参考生成消息摘要的指令来描述示例,但是其可以与其它指令和/或其它处理一起使用。

参考图1a描述结合和使用本发明的一个或多个方面的计算环境的一个实施例。在一个示例中,计算环境基于由纽约阿蒙克的国际商业机器公司(internationalbusinessmachinescorporation)提供的z/架构(z/architecture)。在2015年3月的ibm公开号为sa22-7832-10的“z/架构的工作原理(z/architectureprinciplesofoperation)”中描述了z/架构的一个实施例,其全部内容通过引用并入本文。z/architecture是美国纽约阿蒙克的国际商业机器公司的注册商标。

在另一个示例中,计算环境基于由纽约阿蒙克的国际商业机器公司提供的power架构。在2015年4月9日的国际商业机器公司的“powerisatm版本2.07b(powerisatmversion2.07b)”中描述了power架构的一个实施例,其全部内容通过引用并入本文。powerarchitecture是美国纽约阿蒙克的国际商业机器公司的注册商标。

计算环境还可以基于其它架构,包括但不限于intelx86架构。也存在其它示例。

如图1a所示,计算环境100例如包括计算机系统/服务器12,其可以包括但不限于一个或多个处理器或处理单元16、系统存储器28以及总线18,总线18将各种系统组件(包括系统存储器28)耦接到处理器16。

总线18表示若干类型的总线结构中的任何一种或多种,包括使用各种总线架构中的任何总线架构的存储器总线或存储器控制器、外围总线、加速图形端口、以及处理器或本地总线。作为示例而非限制性地,此类架构包括工业标准架构(isa)总线、微通道架构(mca)总线、增强型isa(eisa)总线、视频电子标准协会(vesa)本地总线和外围组件互连(pci)总线。

计算机系统/服务器12通常包括各种计算机系统可读介质。此类介质可以是计算机系统/服务器12可访问的任何可用介质,并且此类介质包括易失性和非易失性介质、可移动和不可移动介质。

系统存储器28可以包括易失性存储器形式的计算机系统可读介质,诸如随机存取存储器(ram)30和/或高速缓存存储器32。计算机系统/服务器12还可以包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为示例,可以提供存储系统34用于对不可移动的非易失性磁介质(未示出并且通常称为“硬盘驱动器”)进行读取和写入。尽管未示出,但是可以提供用于对可移动的非易失性磁盘(例如,“软盘”)进行读取和写入的磁盘驱动器,以及用于对可移动的非易失性光盘(诸如cd-rom,dvd-rom或其它光学介质的盘)进行读取或写入的光盘驱动器。在这种情况下,每个驱动器都可以通过一个或多个数据介质接口连接到总线18。如下面将进一步描绘和描述的,存储器28可以包括至少一个程序产品,该程序产品具有被配置为执行本发明的实施例的功能的一组(例如,至少一个)程序模块。

作为示例而非限制性地,具有一组(至少一个)程序模块42的程序/实用程序40、以及操作系统、一个或多个应用程序、其它程序模块和程序数据可以存储在存储器28中。操作系统、一个或多个应用程序、其它程序模块和程序数据中的每一个或其某种组合可以包括网络环境的实现。程序模块42通常执行如本文所描述的本发明实施例的功能和/或方法。

计算机系统/服务器12还可以与一个或多个外部设备14(例如,键盘、指向设备、显示器24等)通信,与一个或多个使得用户能够与计算机系统/服务器12交互的设备通信,和/或与使得计算机系统/服务器12能够与一个或多个其它计算设备通信的任何设备(例如,网卡、调制解调器等)通信。此类通信可以通过输入/输出(i/o)接口22进行。此外,计算机系统/服务器12还可以经由网络适配器20通过一个或多个网络(例如,局域网(lan)、广域网(wan)和/或公共网络(例如,因特网))通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它组件通信。应该理解,尽管未示出,但是其它硬件和/或软件组件可以与计算机系统/服务器12结合使用。示例包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器和数据档案存储系统等。

在一个示例中,处理器16包括用于执行指令的多个功能组件。如图1b所示,这些功能组件例如包括用于获取要执行的指令的指令获取组件120、用于解码所获取的指令并获得解码的指令的操作数的指令解码单元122、用于执行解码的指令的指令执行组件124、用于访问用于指令执行的存储器的存储器访问组件126(在需要的情况下)、以及用于提供所执行的指令的结果的写回组件130。根据本发明的一方面,这些组件中的一个或多个可用于确定填充操作的状态136,如本文所描述的。

在一个实施例中,处理器16还包括由一个或多个功能组件使用的一个或多个寄存器140。

参考图2a描述了结合和使用一个或多个方面的计算环境的另一实施例。在该示例中,计算环境200例如包括经由例如一个或多个总线208和/或其它连接彼此耦接的本机中央处理单元(cpu)202、存储器204、以及一个或多个输入/输出设备和/或接口206。作为示例,计算环境200可以包括由纽约阿蒙克的国际商业机器公司提供的powerpc处理器或pseries服务器、由加利福尼亚州帕洛阿尔托的惠普公司(hewlettpackardco.)提供的配备intelitaniumii处理器的hpsuperdome、和/或基于国际商业机器公司、惠普、英特尔(intel)、甲骨文(oracle)或其它公司提供的架构的其它机器。

本机中央处理单元202包括一个或多个本机寄存器210,例如在环境内处理期间使用的一个或多个通用寄存器和/或一个或多个专用寄存器。这些寄存器包括代表任何特定时间点的环境状态的信息。

此外,本机中央处理单元202执行存储在存储器204中的指令和代码。在一个特定示例中,中央处理单元执行存储在存储器204中的仿真器代码212。该代码使得在一个架构中配置的计算环境能够仿真另一架构。例如,仿真器代码212允许基于除z/架构之外的体系结构的机器(例如,powerpc处理器、pseries服务器、hpsuperdome服务器等)仿真z/架构并执行基于z/架构开发的软件和指令。

参考图2b描述了与仿真器代码212有关的进一步细节。存储在存储器204中的访客指令250包括被开发为在不同于本机cpu202的架构中执行的软件指令(例如,与机器指令相关)。例如,访客指令250可能已被设计为在z/架构处理器16上执行,但是相反地,在本机cpu202上进行仿真,本机cpu202可以是例如intelitaniumii处理器。在一个示例中,仿真器代码212包括指令获取例程252以从存储器204获得一个或多个访客指令250并且可选地为所获得的指令提供本地缓存。仿真器代码212还包括指令转换例程254以确定已获得的访客指令的类型并将访客指令转换成一个或多个相应的本机指令256。该转换例如包括识别要由客户执行的功能并选择执行该功能的(多个)本机指令。

此外,仿真器212包括仿真控制例程260以使本机指令被执行。仿真控制例程260可以使本机cpu202执行仿真一个或多个先前获得的访客指令的本机指令的例程,并且在该执行结束时将控制返回到指令获取例程以仿真获得下一访客指令或一组访客指示。本机指令256的执行可以包括将数据从存储器204加载到寄存器中,将数据从寄存器存储回存储器,或者执行如由转换例程确定的某种类型的算术或逻辑运算。

每个例程例如以软件实现,该软件存储在存储器中并由本机中央处理单元202执行。在其它示例中,一个或多个例程或操作以固件、硬件、软件或一些其组合来实现。仿真处理器的寄存器可以使用本机cpu的寄存器210或通过使用存储器204中的位置来仿真。在实施例中,访客指令250、本机指令256和仿真器代码212可以驻留在同一存储器中或者可以分配在不同的存储器设备中。

如本文所使用的,固件包括例如处理器的微代码、毫代码和/或宏代码。例如,固件包括用于实现更高级机器代码的硬件级指令和/或数据结构。在一个实施例中,固件例如包括通常作为微代码传送的专有代码,其包括针对底层硬件的受信软件或微代码并控制对系统硬件的操作系统访问。

在一个示例中,已获得、转换并执行的客户指令250是本文描述的计算最后消息摘要指令。具有一种架构(例如,z/架构)的指令从存储器中被获取、转换并表示为另一架构(例如,powerpc、pseries、英特尔等)的一系列本机指令256。这些本机指令然后被执行。

在一个示例中,计算最后消息摘要(klmd)指令与计算中间消息摘要(kimd)指令(两者例如在z/架构中被定义)一起使用以生成用于认证的消息摘要。kimd旨在当消息的全长不可用时(例如,消息可能从网络适配器或磁盘驱动器以片段形式到达)使用,且klmd旨在用于处理最终消息块包括在必要时执行任何填充。

kimd和klmd二者都对存储器中的消息进行操作,其在本文中被称为指令的第二操作数。消息的最左边字节的存储器地址由奇偶通用寄存器对的偶数寄存器指定,并且消息的长度由该对的奇数寄存器指定。

kimd和klmd均被定义以设置条件代码,如果已经处理了cpu确定的数量的消息字节,但是还剩更多的消息字节,这种情况称为部分完成,并导致条件代码(例如3)被设置。当所有消息字节已被成功处理时,设置替代条件代码(该条件称为完全完成,并且条件代码被设置,例如0)。对于部分或完全完成,(在偶数寄存器中的)消息的地址由所处理的字节数更新,并且(在奇数寄存器中的)消息的剩余长度减少相同的量。如果发生部分完成,程序可以简单地分支回到kimd或klmd指令以继续处理。当发生完全完成时,第二操作数的奇数寄存器中的剩余长度为零。在该实施例中,对于任何单独的消息,对消息执行一次填充,而不管处理是否需要重复执行指令(即,由于部分完成)。因此,在该实施例中,当处理最终的短块或空块时,通过klmd指令执行填充。

kimd和klmd指令被配置为支持sha-1和sha-2散列技术两者。此外,根据本发明的一方面,kimd和klmd指令还被配置为支持另一安全散列技术,称为sha-3。如2015年8月5日,nist发布了正式采用版本的sha-3标准。sha-3标准提供224、256、384和512位的摘要长度(与sha-2相同),并且旨在提供等于或超过sha-2的安全强度。sha-3使用被称为keccak的置换算法,其与sha-2算法不同,可以提供优异的性能。keccak被描述在以下中:fipspub202:联邦信息处理标准出版物,sha-3标准:基于置换的散列和可扩展输出函数。

采用keccak,不是以确定性非零初始链接值(icv)开始,keccak假设消息的icv为0。sha-3使用keccak(称为keccak[c])的版本,其中每个消息块的大小为128位(16字节)。keccak函数被称为海绵函数,因为信息的置换类似于将其吸收到海绵中,并且生成的结果类似于挤压海绵。

sha-3标准还使用例如128位或256位的摘要长度来定义两个可扩展输出函数(xof)。这些xof函数(也称为shake函数(用于shakeccak))类似于非shake函数,因为它们根据输入消息形成散列值。但是,与仅生成固定长度消息摘要的sha-3函数不同,shake函数可以通过反馈机制生成无限长度的延伸的输出,该反馈机制使用keccak重新散列摘要块以生成后续(多个)输出块。这些后续(多个)输出块可以用于附加处理,例如伪随机数发生器。

各种算法的一个特征是可以处理空(即,零长度)消息。因此,根据本发明的一个方面,对于例如klmdshake函数的任何单独执行,当消息的长度为零时,指令将能够确定是否已经执行填充。对于任何单独的消息,填充发生例如仅一次。当第二操作数最初为零时,指令用于区分以下两个其它方面相同的条件:(a)第一次执行,其中填充未被执行,相对于(b)后续执行(例如,在条件代码3之后),其中填充已被执行。

为了支持sha-3标准,将新函数代码和新散列算法描述添加到例如在z/架构中定义的kimd和klmd指令。此外,在一个示例中,对于klmdshake函数,指令的附加输出操作数(被称为第一操作数)被限定。与第二操作数类似,第一操作数指定扩展输出函数(xof)数据的存储位置和长度。与第二操作数一样,klmd指令可以生成cpu确定的数量的xof字节,基于所生成的xof字节的数量更新其第一操作数寄存器,然后通过设置条件代码(例如,cc3)来指示部分完成。程序随后可以重新执行指令,直到其指示成功完成(例如,cc0)。

任何kimd和klmd函数的初始第二操作数长度可以是零,其中空消息被填充。填充操作根据基于被执行的函数而不同(对于sha-1和sha-2,填充是消息长度;对于sha-3和shake函数,填充是可预测的位序列)。在一个示例中,xof处理不开始,直到已经处理了整个第二操作数,包括将发生一次的填充操作。

因此,当第二操作数长度为零时,klmd指令可以有两种方式开始执行:

1.空的第二操作数消息被指定,但填充未被执行。这可能以两种方式发生:

a.发出指令的程序故意指定初始消息长度为零。

b.程序已处理多个消息块,最后的块包含块大小的准确倍数,并且在执行填充之前指令以部分完成结束。

2.指令已经执行填充,并且在先前的部分完成(例如,cc3)之后继续进行xof生成。

因此,根据本发明的一个方面,提供了在指令执行开始时区分这两个条件的能力。填充状态(ps)控件被定义为对例如klmdshake处理的输入。在一个实施例中,ps是例如通用寄存器(在这种情况下,通用寄存器0,其还包含指令的函数代码)中的位。值为0指示未执行填充,值为1指示已执行填充。程序提供初始值为零,并且cpu基于对消息执行填充将该位设置为1。

参考图3a-3h描述被配置为使用填充状态控件的计算最后消息摘要(klmd)指令的一个实施例。如图所示,该指令具有多个字段,并且字段可以具有与其相关联的下标编号。与指令的字段相关联的下标编号表示该字段应用的操作数。例如,与通用寄存器r1相关联的下标编号1表示r1与第一操作数相关联。

在一个示例中,参考图3a,计算最后消息摘要(klmd)指令300包括:具有指示计算最后消息摘要操作的操作代码(操作码)的操作码字段302(例如,位0-15)、用于指定偶奇寄存器对的第一寄存器字段304(例如,位24-27)(其中r1用于指定除0外的偶数号的寄存器)、用于指定偶奇寄存器对的第二寄存器字段306(例如,位28-31)(其中r2用于指定除0外的偶数寄存器)。在一个示例中,由r1字段和r2字段指定的偶奇寄存器对的内容分别包含第一操作数和第二操作数的地址和长度。在一个示例中,字段304-306中的每一个是与操作码字段分开且独立的。此外,在一个实施例中,字段304-306彼此之间是分开并且独立的。然而,在其它实施例中,多于一个字段可被组合。

除了在指令中编码的r1和r2之外,指令的一个实现还使用一个或多个隐含寄存器,包括例如通用寄存器0(gr0)和通用寄存器1(gr1)。下面参考图3b-3g进一步描述每个寄存器。。

首先参见图3b,描述了通用寄存器0(320)的格式的一个实施例。在一个示例中,通用寄存器0包括填充状态(ps)控件322(例如,位55)和函数代码(fc)字段326(例如,位57-63)。在一个示例中,通用寄存器0的位56为零。在其它方面,在一个示例中,识别到规格(specification)异常。在该示例中,忽略通用寄存器0的所有其它位。

下面进一步描述通用寄存器0的每个字段:

填充状态控件(ps)322:对于klmd-shake函数,通用寄存器0的位55是填充状态;在该示例中,对于其它函数,寄存器的位55被忽略。

函数代码(fc)326:通用寄存器0的位位置57-63包含函数代码。计算最后消息摘要操作的所分配的函数代码示例包括:

说明:

--不适用

1对于除最后块之外的所有数据块。最后数据块的大小范围为0到1,小于显示的值。

在该示例中,所有其它函数代码都是未分配的。

如图3c所示,通用寄存器1(330)包含存储器中参数块的最左边字节的逻辑地址332,这将在下面进一步描述。在24位寻址模式中,通用寄存器1的位位置40-63的内容构成地址,并且忽略位位置0-39的内容。在31位寻址模式中,通用寄存器1的位位置33-63的内容构成地址,并且忽略位位置0-32的内容。在64位寻址模式中,通用寄存器1的位位置0-63的内容构成地址。

参见图3d,第一操作数的最左边字节的位置342由r1通用寄存器304的内容指定。此外,参见图3e,第一操作数位置中的字节数(即,长度)352在通用寄存器r1+1(350)中被指定。在该实施例中,第一操作数仅适用于klmd-shake函数,并且对于其它函数第一操作数被忽略。

参见图3f,第二操作数的最左边字节的位置362由r2通用寄存器306的内容指定。此外,参见图3g,第二操作数位置中的字节数(即,长度)372在通用寄存器r2+1(370)中被指定。

在klmd指令的一个实施例的操作中,查询函数提供指示其它函数的可用性的方式。对于查询函数,通用寄存器r1、r1+1、r2和r2+1的内容被忽略。

对于其它函数,第二操作数(例如,使用r2中指定的地址指定的位置处的值)如函数代码所指定的使用参数块中的初始链接值来处理,如下所述,并且结果取代链接值。对于sha-1,sha-256和sha-512函数,操作还使用在参数块中的消息位长度。操作继续进行,直到达到第二操作数的最后位置或者cpu确定的数量的字节已被处理,以先发生者为准。

对于klmd-shake函数,当到达第二操作数的最后时,将扩展输出函数(xof)摘要存储在第一操作数位置(例如,在r1中指定)。然后操作继续进行,直到达到第一个操作数位置的最后或者cpu确定的数量的字节已被存储,以先发生者为准。

结果在条件代码中指示。

作为操作的一部分,通用寄存器r2中的地址以第二操作数处理的字节数递增,并且通用寄存器r2+1中的长度以相同的数递减。地址和长度的形成和更新取决于寻址模式。

例如,在24位寻址模式中,通用寄存器r2的位位置40-63的内容构成第二操作数的地址,并且忽略位位置0-39的内容。被更新的地址的位40-63替代通用寄存器r2中的对应位,忽略更新的地址的位位置40的执行,并且将通用寄存器r2的位位置32-39的内容设置为零。在31位寻址模式中,通用寄存器r2的位位置33-63的内容构成第二操作数的地址,并且忽略位位置0-32的内容。被更新的地址的位33-63替代通用寄存器r2中的对应位,忽略更新的地址的位位置33的执行,并将通用寄存器r2的位位置32的内容设置为零。在64位寻址模式中,通用寄存器r2的位位置0-63的内容构成第二操作数的地址。被更新的地址的位0-63替代通用寄存器r2的内容,并且忽略位位置0的执行。

在24位和31位寻址模式中,通用寄存器r2+1的位位置32-63的内容形成32位无符号二进制整数,其指定第二操作数中的字节数;并且更新的值替代通用寄存器r2+1的位位置32-63的内容。在64位寻址模式中,通用寄存器r2+1的位位置0-63的内容形成64位无符号二进制整数,其指定第二操作数中的字节数;并且更新的值取代通用寄存器r2+1的内容。

在24位或31位寻址模式中,通用寄存器r2和r2+1的位位置0-31的内容保持不变。

对于两个klmd-shake函数(例如,函数代码36、37),以下应用:

·通用寄存器0的位55是填充状态(ps)控件。值(例如0)指示第二操作数的填充未被执行。值(例如1)指示第二操作数的填充已被执行。

当在指令的开始处通用寄存器r2+1中的第二操作数长度非零并且填充状态为1时,识别规格异常,并且操作被抑制。

当剩余的第二操作数长度为零时,cpu检查填充状态以确定是否要执行第二操作数的填充。当第二操作数的填充已被执行时,cpu将填充状态设置为1。

·r1字段指定偶奇通用寄存器对,并用于指定除通用寄存器0外以及除寄存器r2外的偶数号寄存器;在其它方面,在示例中,识别出规格异常。

·第一操作数的最左边字节的位置由通用寄存器r1的内容指定。第一操作数位置中的字节数在通用寄存器r1+1中指定。

·作为操作的一部分,通用寄存器r1中的地址以存储在第一操作数中的字节数递增,并且通用寄存器r1+1的长度以相同的数递减。地址和长度的形成和更新取决于寻址模式。

·如上所述,通用寄存器r1的寻址模式特性和通用寄存器r1+1的长度特性分别与通用寄存器r2和r2+1的相同。

对于除两个klmd-shake函数之外的函数,在该实施例中,忽略通用寄存器0的位55和指令的r1字段。在这种情况下,第一操作数不存在,并且不修改通用寄存器r1和r1+1。

在存取寄存器模式中,存取寄存器1和r2分别指定包含参数块和第二操作数的地址空间。对于klmd-shake函数,存取寄存器r1指定包含第一操作数的地址空间。

如同处理在第二操作数的左端开始并且逐块地向右进行,来获得结果。对于除klmd-shake函数之外的所有函数,当第二操作数中的所有源字节都已处理(称为正常完成)时或cpu确定的块数小于已经处理的第二个操作数的长度(称为部分完成)时,操作结束。cpu确定的块数取决于模型,并且每次执行指令时可以是不同的数。cpu确定的块数通常是非零的。在某些异常情况下,该数字可以是零,并且可以设置条件代码,例如3,其中没有进展。但是,cpu防止这种无进展情况的无休止再次发生。

当链接值字段(例如,在参数块中)与第一或第二操作数的任何部分重叠时,链接值字段中的结果是不可预测的。

对于klmd-sha-1、klmd-sha-256和klmd-sha-512函数,在已处理通用寄存器r2+1中指定的第二操作数中的所有字节之后,执行填充操作,在填充块上执行最终的散列操作,然后发生正常完成。对于klmd-sha3和klmd-shake函数,在已处理第二操作数中的所有完整块之后,对剩余的部分块或空块执行填充操作,并对被填充的块执行最后的散列操作块。然后klmd-sha3函数正常完成。

对于klmd-shake函数,根据本发明的一个方面,当填充已被执行时,填充状态在通用寄存器0中被设置为1,并且扩展输出函数(xof)消息摘被存储在第一操作数位置。当已存储所有第一操作数(称为正常完成)时或者当已存储cpu确定的块数(其小于第一操作数长度)(称为部分完成)时,xof消息摘要生成结束。cpu确定的块数取决于模型,并且每次执行指令时可以是不同的数。cpu确定的块数通常是非零的。在某些异常情况下,该数可以是零,并且可以设置条件代码,例如3,没有进展。但是,cpu可以防止这种无进展情况的无休止再次发生。

当操作由于正常完成而结束时,设置条件代码,例如0,通用寄存器r2中的第二操作数地址被更新,并且通用寄存器r2+1中的第二操作数长度为零。对于klmd-shake函数,通用寄存器r1中的第一操作数地址被更新,并且通用寄存器r1+1中的第一操作数长度为零。

当操作由于部分完成而结束时,设置条件代码,例如3。对于除klmd-shake函数之外的函数,通用寄存器r2+1中的结果值为非零。对于klmd-shake函数,如果第二操作数未被完全处理,则通用寄存器r2+1中的结果值为非零,如果第一操作数未被完全处理,则通用寄存器r1中的结果值为非零。

当第二操作数长度初始为零时,不访问第二操作数,分别在通用寄存器r2和r2+1中的第二操作数地址和第二操作数长度不被改变,并且设置条件代码,例如0。然而,空块(l=0)情况填充操作被执行,并将结果存储到参数块中。

对于klmd-shake函数,当第一操作数长度初始为零时,不访问第一操作数,并且分别在通用寄存器r1和r1+1中的第一操作数地址和第一操作数长度不被改变。然而,即使第一操作数长度初始为零时,也会更新参数块。

可以针对存储的参数块和第一操作数位置(当适用时)的部分识别per存储改变事件。可以针对第一操作数位置(在适用时)、针对第二操作数位置以及针对参数块,识别per零地址检测事件。当检测到多于一个位置的per事件时,无法预测在per访问标识(paid)和perasceid(ai)中哪个位置被识别。

如该cpu、其它cpu以及信道程序所观察的,对参数块和存储操作数的引用可以是多访问引用,对这些存储位置的访问不必须是块并发的,并且不限定这些访问或引用的顺序。

可以针对第一操作数(当适用时)的较大部分和第二操作数报告访问异常,而不是在单次指令执行中处理。然而,对于超出第一或第二操作数长度的位置,以及超出当前正在处理的位置超过4k个字节的位置,不识别访问异常。

如上所述,计算最后消息摘要指令被配置为执行多个函数。下面描述这些函数中的两个,klmd-shake-128和klmd-shake-256函数。在描述这些函数时,符号xp<n>指示由shake函数使用的n个填充字节。填充的最左边字节的位位置3到7包含二进制1,并且填充的最右边字节的位位置0包含二进制1。(这是针对大端(bigendian)格式的,并且对于其它格式(例如小端)可以是不同的,作为示例。)在一个示例中,所有其它位都是零。例如,当填充状态(ps,通用寄存器0的位55)为零,并且剩余的第二操作数长度小于数据块大小时,执行针对shake函数的填充。

klmd-shake-128(klmd函数代码36)

在一个示例中,利用该函数,参考图3h,使用包括链接值382的参数块380。最初,链接值382包括初始链接值(icv)。初始链接值表示例如由实现sha-3和shake算法的keccak[c]函数使用的1600位状态数组。

在该函数的操作中,当通用寄存器r2+1中的第二操作数的长度大于或等于168字节时,使用keccak[c]算法采用在参数块380中200字节初始链接值对操作数2中的168字节消息块生成200字节的中间消息摘要。所生成的中间消息摘要(也称为输出链接值(ocv))替代参数块的链接值382。

在一个示例中,对于sha3和shake函数,keccak[c]算法使用在参数块中1600位状态数组。状态数组包括25个通道,每个通道具有64位。状态数组的位从0到1599被编号,每个通道的位从0到63被编号。

在参数块中,状态数组的字节从左到右升序出现。但是在每个字节内,位从左到右降序出现。也就是说,参数块的字节0包含(从左到右)状态数组的第7、6、5、4、3、2、1和0位。字节1包含状态数组的第15、14、13、12、11、10、9和8位,诸如此类。当在存储器中表示时,状态数组的任何单独通道的位位置对应于2的幂。(在其它实施例中,排序可以是不同的。)

以上描述的对参数块的位排序也适用于第二操作数的消息字节。对于klmd-shake函数,存储在第一操作数中的结果类似于参数块的结果,因为每个字节中的从左到右的位排序为7、6、5、4、3、2、1和0。

此外,在操作中,当剩余的第二操作数长度小于完整块(例如,168字节)时,处理描述如下。

当填充状态时,通用寄存器0的位55为零(指示填充还未被执行),填充发生,如下面并参考图4所述:

·第二操作数400的任何剩余字节在右侧402上填充(如符号“xp<n>”描述的),以形成168字节的消息块404。填充在即使在第二操作数中没有剩余字节时也发生,并且不改变第二操作数的内容。

·填充状态控件被设置为1,指示已执行填充。

·通用寄存器r2中的第二操作数地址以所处理的消息字节的数量而增加,且通用寄存器r2+1中的第二操作数长度被设置为零。

·168字节填充消息404与状态数组的内容408(来自参数块中的icv或来自先前块处理的ocv)进行异或406,以形成用于扩展输出函数(xof)处理中的输出链接值410。

取决于填充完成时处理的第二操作数块的数量,(a)输出链接值被存储到参数块中,并且指令通过设置条件代码(例如3)而完成(部分完成),或者(b)操作继续进行扩展输出函数(xof)处理,如下所述。

当填充状态为1时(指示已经通过当前或先前执行的指令对消息执行了填充),如下面参考图5描述的执行扩展输出函数(xof)处理。

1.如果通用寄存器r1+1中的第一操作数长度为零,则输出链接值存储在参数块500中,并且指令以条件代码(例如0)完成。如果在指令的开始第一操作数长度为零,则无论icv是从参数块中取出或者未经修改地存储为ocv,其是取决于模型的。

2.使用先前的输出链接值(ocv)作为输入并替代输出链接值,来调用keccak[c]函数502。

3.通用寄存器r1包含第一操作数的当前地址,并且通用寄存器r1+1包含第一操作数的剩余长度。要被存储的字节数n是剩余的第一操作数长度或168,取较小者。输出链接值的前n个字节被存储在第一操作数位置。通用寄存器r1中的第一操作数地址以n递增,并且第一操作数长度通用寄存器r1+1以n递减。

重复该过程的步骤1-3,直到第一操作数长度变为零(在这种情况下,指令以条件代码(例如,0)完成)或直到cpu确定的数量的字节已被存储(在这种情况下,指令用条件代码(例如,3)完成)。无论条件代码0还是3被设置,输出链接值510都存储在参数块的字节0-199中。

klmd-shake-256(klmd函数代码37)

对于该函数,所使用的参数块还包括链接值382,如图3h所示。

在该函数的操作中,当通用寄存器r2+1中的第二操作数的长度大于或等于136字节时,使用keccak[c]算法采用参数块中的200字节的初始链接值,对操作数2中的136字节消息块生成200字节的中间消息摘要。所生成的中间消息摘要(也称为输出链接值(ocv))替代参数块的链接值。对照状态数组中的位的编号,参数块和第二操作数中的位的编号如上描述。该操作继续进行,直到第二操作数的长度小于136字节,此时操作如下所述继续。

当填充状态(通用寄存器0的位55)为零(指示填充还未执行)时,填充发生,如下面并参考图6所述。

·第二操作数600的任何剩余字节在右侧602上填充,如符号“xp<n>”所描述的,以形成136字节的消息块604。填充在即使在第二操作数中没有剩余字节时也发生,并且并不改变第二个操作数中的内容。

·填充状态控件被设置为1,表示已执行填充。

·通用寄存器r2中的第二操作数地址以被处理的消息字节数增加,通用寄存器r2+1中的第二操作数长度被设置为零。

·136字节填充消息604与状态数组的内容608(来自参数块中的icv或来自先前块处理的ocv)进行异或606,以形成用于扩展输出函数(xof)处理中的输出链接值610。

取决于填充完成时处理的第二操作数块的数量,(a)输出链接值被存储到参数块中,并且指令通过设置条件代码(例如,3)而完成(部分完成),或者(b)操作继续进行扩展输出函数(xof)处理,如下所述。

当填充状态为1时(指示已经通过当前或先前执行的指令对消息执行了填充),如下面参考图7描述的执行扩展输出函数(xof)处理。

1.如果通用寄存器r1+1中的第一操作数长度为零,则输出链接值存储到参数块700中,并且指令以条件代码0完成。如果第一操作数长度在开始时为零,则无论icv是从参数块中取出或者未经修改地存储为ocv,其都取决于模型。

2.使用先前的输出链接值(ocv)作为输入并替代输出链接值,来调用keccak[c]702函数。

3.通用寄存器r1包含第一操作数的当前地址,并且通用寄存器r1+1包含第一操作数的剩余长度。要被存储的字节数n是剩余的第一操作数长度或136,取较小者。输出链接值的前n个字节存储在第一操作数位置704。通用寄存器r1中的第一操作数地址以n递增,并且第一操作数长度通用寄存器r1+1以n递减。

重复该过程的步骤1-3,直到第一操作数长度变为零(在这种情况下,指令以条件代码(例如,0)完成)或直到cpu确定的数量的字节已被存储(在这种情况下,指令用条件代码(例如,3)完成)。无论条件代码0还是3被设置,输出链接值710都存储在参数块的字节0-199中。

klmd指令的特殊条件:

在一个示例中,如果发生以下任何情况,则识别规格异常并且不采取其它动作:

·通用寄存器0的位56不为零。

·通用寄存器0的位57-63指定未分配或未安装的函数代码。

·r2字段指定奇数寄存器或通用寄存器0。

·对于klmd-shake函数,以下任一为真:

-r1字段指定奇数寄存器、通用寄存器0或寄存器r2。

-第二操作数长度非零,且填充状态为1。

结果条件代码:

0正常完成

1--

2--

3部分完成

在一个实施例中:

*针对klmd-shake函数,当在xof处理期间设置条件代码3时,通用寄存器r1和r1+1中的第一操作数地址和长度分别被更新,以便程序可以分支回到指令以继续操作。

对于异常情况,cpu可以防止无进展情况的无休止的重复发生。因此,无论何时条件代码3被设置,程序可以安全地分支回到指令,而不暴露于无限循环。

*计算最后消息摘要指令不要求第二操作数是数据块大小的倍数。计算最后消息指令首先处理完整的块,并且可以在处理所有块之前设置条件代码,例如3。在处理完所有完整块之后,计算最后消息指令然后执行填充操作,包括第二操作数的剩余部分。这可以使用指定块摘要算法的一次或两次迭代。

*计算最后消息摘要指令对消息(其长度为8位的倍数)提供sha填充。如果要将sha函数应用于不是8位的倍数的位串,则程序将执行sha填充并使用计算最后消息摘要指令。

*对于klmd-shake函数,在以下示例中,以下应用:

a.填充状态,通用寄存器0的位55,在对消息第一次执行klmd之前将被设置为零,并且填充状态不由针对同一消息的任何后续klmd执行的程序改变,直到正常完成发生。

b.如果在第一操作数长度为零时执行第二操作数的最后(短或空)块的填充,则被填充的块与状态数组的内容进行异或运算,结果被存储为参数块中的输出链接值,指令以条件代码0完成。在这种情况下,不调用keccak[c]函数。

*在一个方面,klmdsha-3和shake函数根据最终的nistsha-3规格执行填充(例如,使用指定的位序列)。早期版本的sha-3规格使用不同的填充位序列。如果软件执行对最后的消息块的填充,则根据早期sha-3规格的软件仍然可以从kimdsha-3和shake函数中受益。

如本文所述,计算最后消息摘要指令的一个或多个函数执行填充操作。然而,在一个实施例中,该填充操作将被执行一次,因此某些处理被执行。参考图8描述关于该处理的附加细节。该处理由至少一个处理器执行。

参见图8,首先,基于输入消息的最后块的处理,确定第二操作数的长度是否等于指定值,例如0,查询800。如果长度不等于零,则在步骤806,对最后(短)块执行填充,使用keccak算法对填充块进行散列,寄存器r2中的第二操作数地址以被处理的字节的数量递增,并且在通用寄存器r2+1中的第二操作数长度被设置为0。在步骤808,将填充状态控件设置为1,然后在步骤802开始扩展输出函数处理。上面描述了该处理的一个示例。

返回到查询800,如果第二操作数的长度等于指定值,则执行对填充状态控件的检查,查询804。如果填充状态控件被设置为1(其指示先前已对此消息执行填充),则在步骤802,开始或继续扩展输出函数处理。然而,返回到查询804,如果填充状态控件被设置为0(指示尚未对该消息执行填充),则在步骤806,如本文所述执行填充,使用keccak算法对填充块进行散列,寄存器r2中的第二操作数地址以被处理的字节的数量增加,并且通用寄存器r2+1中的第二操作数长度被设置为零。在步骤808,将填充状态控件设置为1,并且在步骤802开始扩展输出函数处理。处理由此完成。

如本文所述,提供了区分在指令执行开始时的多个条件(其包括是否已指定空的第二操作数消息或者是否已执行填充)的能力。通过提供该控件,便于实现计算环境内的处理,包括数据的认证以及其它处理。因此,本发明的各方面与计算技术密不可分。

参考图9a-9b描述关于促进计算环境内的处理的进一步细节,包括执行指令和使用填充控件。

参见图9a,在步骤900,获得用于生成消息的消息摘要的指令,并在步骤902,由至少一个处理器执行该指令。执行例如包括:在步骤904,检查指令的填充状态控件以确定是否已对该消息执行填充,在步骤906,基于检查指示填充已被执行而执行第一动作,以及在步骤908,基于检查指示尚未执行填充而执行与第一动作不同的第二动作。

作为示例,在步骤910,第一动作包括执行扩展输出函数处理以执行与消息摘要相关联的进一步处理。在步骤912,执行扩展输出函数处理包括例如重新散列消息摘要的至少一部分,以生成附加的输出。

此外,作为示例,在步骤914,第二动作包括执行对消息的至少一部分的填充以形成选择大小的消息块。在步骤916,执行填充包括例如填充位0到消息的至少一部分的所选择的位置。此外,在步骤918,第二动作包括设置填充状态控件以指示已对该消息执行填充。

参考图9b,作为示例,填充状态控件位于由指令使用的寄存器中(920),或者填充状态控件位于指令可访问的存储器中(922)。

在一个示例中,指令是计算最后消息摘要指令,其用于处理消息的一个或多个最后块以生成要在消息的认证中使用的消息摘要(924)。

例如,消息被存储在存储器中,并且指令提供在存储器中的地址以定位该消息(926)。

在一个实施例中,在步骤928,执行还包括基于填充状态控件指示填充已经被执行并且基于指令开始执行,确定消息的长度是否为非零;以及基于该确定指示长度为非零,填充状态控件指示填充已经被执行并且指令开始执行,指示异常。

尽管本文提供了各种实施方案和实施例,但许多变化是可能的。例如,在其它实施例中,包括在指令使用的寄存器和/或字段中的值可以在其它位置,例如存储器位置等。此外,其它、附加或更少的字段或寄存器,或其它大小均可以使用。许多变化都是可能的。例如,可以使用隐式寄存器而不是显式指定的寄存器或字段。另外,本发明的一个或多个方面可以与其它散列算法和/或其它技术或过程一起使用。其它变化也是可能的。

本发明可以是任何可能的技术细节集成级别的系统、方法和/或计算机程序产品。该计算机程序产品可以包括一个(或多个)计算机可读存储介质,其上具有计算机可读程序指令,用于使处理器执行本发明的各方面。

计算机可读存储介质可以是有形设备,其可以保留和存储指令以供指令执行设备使用。计算机可读存储介质可以是例如但不限于电子存储设备,磁存储设备、光存储设备、电磁存储设备、半导体存储设备或前述的任何合适组合。计算机可读存储介质的更具体示例的非详尽列表包括以下内容:便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式光盘只读存储器(cd-rom)、数字通用光盘(dvd)、记忆棒、软盘、机械编码设备(诸如在其上记录有指令的打孔卡或凹槽内凸起结构)、以及前述的任何合适的组合。如在此使用的计算机可读存储介质不应被解释为暂态信号本身,诸如无线电波或其它自由传播的电磁波、通过波导或其它传输介质传播的电磁波(例如,通过光纤电缆传递的光脉冲)或通过电线传输的电信号。

在此描述的计算机可读程序指令可以从计算机可读存储介质下载到相应的计算/处理设备,或经由网络(例如,互联网、局域网、广域网和/或无线网络)下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。

用于执行本发明的操作的计算机可读程序指令可以是以一种或多种编程语言的任意组合编写的汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路的配置数据、或源代码或目标代码,该一种或多种编程语言包括诸如smalltalk、c++等的面向对象的编程语言,以及诸如“c”编程语言或类似的编程语言的过程编程语言。计算机可读程序指令可以完全在用户的计算机上执行、部分地在用户的计算机上执行、作为独立的软件包执行、部分地在用户的计算机上且部分地在远程计算机上执行、或完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络(包括局域网(lan)或广域网(wan))连接到用户的计算机,或者可以连接到外部计算机(例如,经由使用互联网服务提供商的互联网连接)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla)的电子电路可以通过利用计算机可读程序指令的状态信息来个性化定制电子电路以执行计算机可读程序指令,以便执行本发明的各方面。

在此参考根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图图示和/或框图来描述本发明的各方面。将理解,流程图图示和/或框图中的每个框以及流程图图示和/或框图中的框的组合可以由计算机可读程序指令实施。

这些计算机可读程序指令可以被提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器以制造机器,使得经由计算机的处理器或其它可编程数据处理装置执行的指令创建用于实施流程图和/或框图的一个框或多个框中指定的功能/动作的部件。这些计算机可读程序指令还可以存储在计算机可读存储介质中,该计算机可读存储介质可以指示计算机、可编程数据处理装置和/或其它设备以特定方式作用,使得其中存储有指令的计算机可读存储介质包括制品,该制品包括实施流程图和/或框图的一个框或多个框中指定的功能/动作的各方面的指令。

计算机可读程序指令还可以被加载到计算机、其它可编程数据处理装置或其它设备上,以使得一系列操作步骤在计算机、其它可编程装置或其它设备上执行以生成计算机实施的过程,这样在计算机、其它可编程装置或其它设备上执行的指令实施在流程图和/或框图的一个框或多个框中指定的功能/动作。

附图中的流程图和框图示出根据本发明的各种实施例的系统、方法和计算机程序产品的可能实施方式的架构、功能和操作。在这方面,流程图或框图中的每个框可以表示模块、区段或指令的一部分,其包括用于实施指定的逻辑功能的一个或多个可执行指令。在一些替代实施方式中,框中所标注的功能可以不按图中所示的顺序发生。例如,视所涉及的功能而定,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行。还应注意,框图和/或流程图图示中的每个框以及框图和/或流程图图示中的框的组合可以由执行特定功能或动作或执行专用硬件和计算机指令的组合的基于硬件的专用系统来实施。

除了上述之外,可以由提供客户环境管理的服务提供商提供、给予、部署、管理、服务一个或多个方面。例如,服务提供商可以创建、维护、支持计算机代码和/或为一个或多个客户执行一个或多个方面的计算机基础设施。作为回报,服务提供商可以例如根据订阅和/或费用协议从客户接收付款。附加地或替代地,服务提供商可以从向一个或多个第三方销售广告内容来接收付款。

在一个方面,可以部署应用程序以执行一个或多个实施例。作为一个示例,应用程序的部署包括提供可操作以执行一个或多个实施例的计算机基础结构。

作为另一方面,可以部署计算基础设施,包括将计算机可读代码集成到计算系统中,其中与计算系统结合的代码能够执行一个或多个实施例。

作为又一方面,可以提供一种用于集成计算基础设施的过程,包括将计算机可读代码集成到计算机系统中。该计算机系统包括计算机可读介质,其中该计算机介质包括一个或多个实施例。与计算机系统结合的代码能够执行一个或多个实施例。

尽管以上描述了各种实施例,但这些仅是示例。例如,具有其它体系结构的计算环境可用于合并和使用一个或多个实施例。此外,可以使用不同的指令,指令格式,指令字段和/或指令值。许多变化是可能的。

此外,其它类型的计算环境可以受益并被使用。作为示例,适用于存储和/或执行程序代码的数据处理系统是可用的,其包括通过系统总线直接或间接耦接到存储器元件的至少两个处理器。存储器元件包括例如在程序代码的实际执行期间使用的本地存储器,大容量存储和高速缓存存储器,该高速缓存存储器提供至少一些程序代码的临时存储,以便减少执行期间必须从大容量存储重新取回代码的次数。

输入/输出或i/o设备(包括但不限于键盘,显示器,指示设备,dasd,磁带,cd,dvd,拇指驱动器和其它存储介质等)可以直接耦接到系统或通过介入i/o控制器而耦接到系统。网络适配器还可以耦接到系统,以使数据处理系统能够通过介入私有或公共网络而耦接到其它数据处理系统或远程打印机或存储设备。调制解调器,电缆调制解调器和以太网卡只是可用类型的网络适配器中的一小部分。

这里使用的术语仅出于描述特定实施例的目的,并不意图限制本发明。如这里所使用的,单数形式“一”,“一个”和“该”旨在也包括复数形式,除非上下文另有明确说明。将进一步理解,当在本说明书中使用时,术语“包括”和/或“包含”指定所述特征、整数、步骤、操作、元件和/或组件的存在,但不排除存在或者添加一个或多个其它特征、整数、步骤、操作、元素、组件和/或它们的组合。

以下权利要求中的所有装置或步骤加功能元件的相应结构、材料、动作和等同物(如果有的话)旨在包括如所具体要求保护的用于结合其它要求保护的元件来执行功能的任何结构、材料或动作。已经出于说明和描述的目的给出了对一个或多个实施例的描述,但是并不旨在穷举或限制于所公开的形式。许多修改和变化对于本领域普通技术人员来说是显而易见的。选择和描述实施例是为了最好地解释各个方面和实际应用,并且使本领域普通技术人员能够理解具有各种修改的各种实施例适合于预期的特定用途。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1