CN104067194A - 用于计算多轮skein散列算法的执行单元的设备和方法 - Google Patents

用于计算多轮skein散列算法的执行单元的设备和方法 Download PDF

Info

Publication number
CN104067194A
CN104067194A CN201180076287.0A CN201180076287A CN104067194A CN 104067194 A CN104067194 A CN 104067194A CN 201180076287 A CN201180076287 A CN 201180076287A CN 104067194 A CN104067194 A CN 104067194A
Authority
CN
China
Prior art keywords
instruction
skein
input
hashing algorithm
result
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201180076287.0A
Other languages
English (en)
Other versions
CN104067194B (zh
Inventor
G·M·沃尔里齐
K·S·雅普
J·D·吉尔福德
E·奥兹图科
V·戈帕尔
W·K·费格哈利
S·M·格尔雷
M·G·迪克森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN104067194A publication Critical patent/CN104067194A/zh
Application granted granted Critical
Publication of CN104067194B publication Critical patent/CN104067194B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC

Abstract

描述了一种包括指令流水线内的执行单元的设备。执行单元具有多级电路,包括如下的a)和b)。a)具有多个混合逻辑部分的第一逻辑电路部分,每一个逻辑部分都具有:i)接收第一四倍长字的第一输入和接收第二四倍长字的第二输入;ii)具有分别耦合到第一和第二输入的一对输入的加法器;iii)具有耦合到第二输入的相应的输入的旋转器;iv)具有耦合到加法器的输出的第一输入和耦合到旋转器的输出的第二输入的异或门。b)具有耦合到相应的加法器和多个混合逻辑部分的异或门输出的输入的置换逻辑电路。

Description

用于计算多轮SKEIN散列算法的执行单元的设备和方法
背景
发明领域
本发明一般涉及计算科学,更具体而言,涉及用于计算多轮Skein散列算法的执行单元的设备和方法。
背景
图1示出了利用半导体芯片上的逻辑电路实现的处理核100的高级别图示。处理核包括流水线101。流水线包括多级,每一级都被设计为在完全执行程序代码指令所需的多步骤过程中执行特定的步骤。这些通常包括至少:1)指令获取和解码;2)数据获取;3)执行;4)回写。执行级对由同一个指令所标识并在另一先前级(例如,上面的步骤2)获取的数据执行由在先前级(例如,在上面的步骤1)中获取和解码的指令所标识的特定操作。被操作的数据通常是从(通用)寄存器存储空间102获取的。在操作完成时创建的新的数据也通常被“写回到”寄存器存储空间(例如,在上面的级4))。
与执行级相关联的逻辑电路通常由多个“执行单元”或“功能单元”103_1到103_N组成,它们各自被设计为执行其自己的唯一操作子集(例如,第一功能单元执行整数数学操作,第二功能单元执行浮点指令,第三功能单元执行来自/向缓存/存储器的加载/存储操作,等等)。由全部功能单元执行的全部操作的集合对应于由处理核100支持的“指令集”。
在计算机科学领域,有两种类型的处理器体系结构:“标量”和“矢量”。标量处理器被设计成执行那些对单个数据集执行操作的指令,而矢量处理器被设计成执行对多个数据集执行操作的指令。图2A和2B呈现了演示了标量处理器和矢量处理器之间的基本区别的比较示例。
图2A示出了标量AND(与)指令的示例,其中,单一操作数集,A和B,被相加在一起,以产生单数(或“标量”)结果C(即,AB=C)。相比之下,图2B示出了矢量AND指令的示例,其中,两个操作数集,A/B和D/E被分别并行地相加在一起,以同时产生矢量结果C,F(即,A.AND.B=C和D.AND.E=F)。作为术语,“矢量”是具有多个“元素”的数据元素。例如,矢量V=Q,R,S,T,U具有五个不同的元素:Q,R,S,T和U。示例性矢量V的“大小”是五(因为它具有五个元素)。
图1还示出了不同于通用寄存器空间102的矢量寄存器空间104的存在。具体而言,通用寄存器空间102名义上用于存储标量值。如此,当执行单元中的任何一个执行标量运算时,它们名义上使用从通用寄存器存储空间102调用的操作数(并将结果写回到)通用寄存器存储空间102。相比之下,当执行单元中的任何一个执行矢量运算时,它们名义上使用从矢量寄存器空间107调用的操作数(并将结果写回到)矢量寄存器空间107。存储器的不同的区域同样可以被分配用于存储标量值和矢量值。
还请注意,在功能单元103_1到103_N的相应的输入和输出处存在掩码逻辑104_1到104_N和105_1到105_N。在各实现中,实际实现这些层中的仅一个层——虽然这不是严格的要求。对于使用掩码的任何指令,输入掩码逻辑104_1到104_N和/或输出掩码逻辑105_1到105_N可以被用来控制对于矢量指令,哪些元素被有效地操作。这里,从掩码寄存器空间106中读取掩码矢量(例如,以及从矢量寄存器存储空间107中读取的输入数据矢量),并被呈现给掩码逻辑104,105层中的至少一层。
在执行矢量程序代码的过程中,每一矢量指令都不必要求完全数据字。例如,一些指令的输入矢量可以只是8个元素,其他指令的输入矢量可以是16个元素,其他指令的输入矢量可以是32个元素,等等。因此,掩码层104/105用于标识完全矢量数据字中适用于特定指令以便跨指令影响不同的矢量大小的一组元素。通常,对于每一个矢量指令,保留在掩码寄存器空间106中的特定的掩码模式被指令调用,从掩码寄存器空间中获取,并被提供给掩码层104/105中的任何一个或两者,以对于特定矢量运算,“启用”正确的元素集。
图3a到3d涉及Skein散列算法。图3a示出了Skein散列算法300的示例性高级别处理流程。通常,对64比特数据块的对执行Skein散列算法。每一个64比特数据块都可被称为“四倍长字(quadword)”。在图3a的示例性高级别处理流程中,输入301a到301h对应于相应的四倍长字。即,在输入端301a呈现第一四倍长字,在输入端301b呈现第二四倍长字,等等。
在Skein 256的情况下,向散列算法呈现256个输入比特(4个输入四倍长字)。在Skein 512的情况下,向散列算法呈现输入512比特(8个输入四倍长字)。在Skein 1024的情况下,向散列算法呈现1024个输入比特(16个输入四倍长字)。
图3a示出了Skein 512算法的示例。如在图3a的观察到的示例中,对初始输入四倍长字301a-h执行300第一“子密钥(subkey)加法”。子密钥加法是大小等于由向它呈现的四倍长字所表示的值的数值的加法。例如,在Skein_512的情况下,使用八个四倍长字来构建512比特值。如此,子密钥也是512个比特,并直接与由内部状态的八个四倍长字所表示的值相加。子密钥的值,和/或其计算方法轻松地对那些精通本技术的人可用,这里不必讨论。
根据图3a的流程图,“轮”(round)包括“混合”操作级302,后面跟着“置换”操作级303。对四倍长字的对执行单个混合操作。如此,对于Skein-512,在混合操作级302执行四个单个混合操作302a到302d,以构建512比特的内部状态。置换操作级303洗牌(shuffle)混合操作的输出。在图3b中观察到Skein 512置换模式的示例(Skein-256和Skein-1024具有它们自己的置换模式)。
四轮304a,304b,304c和304d的序列后面是另一子密钥加法305,并重复四轮后面跟着子密钥加法的过程(例如,总共18次),直到计算预设的的总轮数(例如,总共72轮)。
图3c示出了混合操作。如在图3c中观察到的,将左边输入四倍长字310a与右边输入四倍长字310b相加,以产生左边输出四倍长字311a。也旋转312右边输入四倍长字310b。左边输出311a与旋转的右边输入四倍长字异或(XOR),以产生右边输出四倍长字311b。应用于右边输入四倍长字310b的旋转量是执行的特定轮的函数,并且其中四倍长字驻留在构成算法的内部状态(例如,对于Skein 512算法,512比特内部状态)的四倍长字组中。图3d示出了用于确定旋转的方案的实施例。
附图简述
本发明是作为示例说明的,而不仅限制于各个附图的图形,在附图中,类似的参考编号表示类似的元件,其中:
图1示出了指令执行流水线;
图2a和2b比较标量与矢量处理;
图3a到3d示出了Skein散列算法的各方面;
图4a和4b示出了由用于计算多轮Skein散列算法的不同的执行单元执行的方法;
图5a和5b示出了用于计算多轮Skein散列算法的不同的执行单元;
图6a和6b示出了用于计算多轮Skein散列算法的不同的目标代码序列;
图7a到7c示出了由用于计算多轮Skein散列算法的不同的执行单元执行的方法;
图8a到8c示出了用于计算多轮Skein散列算法的不同的执行单元;
图9a到9c示出了用于计算多轮Skein散列算法的不同的目标代码序列;
图10示出了计算系统的实施例。
详细描述
概览
图4a,5a和6c涉及可以执行四轮Skien 512散列算法的计算的单个指令的第一实施例。图4a示出了指令本身的操作序列。图5a示出了执行单元的逻辑设计,而图6a示出了目标代码表示。
参考图4a和5a,执行单元的数据路径包括有四个并行混合逻辑部分且后面跟着置换逻辑块的四级504a-504d。例如,级504a包括并行混合逻辑部分503a-503d,后面跟着置换逻辑块507。
图4a示出了单个指令401的操作的实施例。根据在图4a中观察到的过程,假设指令消耗三个指令流水线周期,其中,每一个指令流水线周期都可包括两个阶段。这里,例如,如果指令流水线周期被时钟的上升沿标记,则指令阶段被同一时钟的上升和下降沿标记。
相应地,在图4a中观察到三个指令流水线周期402a,402b,402c,每一个指令周期都具有一对阶段。具体而言,指令流水线周期402a具有相关联的阶段403a,b;指令流水线周期402b具有相关联的阶段403c,d;指令流水线周期402c具有相关联的阶段403e,f。如此,在此特定实施例中,指令消耗六个阶段。精通相关技术的人将可以理解,其他实现可以消耗多一些或少一些的阶段或周期。
参考图4a和5a,在指令周期402a的第一阶段403a,输入操作数数据被读取到寄存器501和502两者。在图5a的特定实施例中,寄存器501和502各自都是256比特寄存器。因此,完全填充寄存器501,502两者会设置计算Skein 512算法所需的512比特内部状态的数据路径。
在指令周期402a的第二阶段403b,输入操作数数据被从寄存器501和502中读取,并通过数据路径的第一级504a被处理。即,寄存器501的内容的左半部(两个四倍长字=2x64=128比特的数据)馈送混合部分逻辑503a。更具体而言,寄存器501的最左边的四倍长字馈送混合逻辑503a的左边四倍长字输入,而寄存器501的最左边的四倍长字旁边的第二个馈送混合逻辑503a的右边四倍长字输入。此外,寄存器501的最右边的四倍长字馈送混合逻辑503b的最右边四倍长字输入,寄存器501的最右边的四倍长字旁边的第二个馈送混合逻辑503b的最左边的四倍长字输入。寄存器502以类似的方式馈送混合逻辑部分503c和503d。
混合逻辑部分503a-503d中的每一个都包含符合Skein算法的混合计算的相应的加法器、旋转器和异或逻辑电路(也参见图3c)。置换逻辑507被设计成利用Skein 512算法一致地置换来自混合逻辑部分503a-503d的八个四倍长字(参见图3b)。
如在图4a中观察到的,在指令阶段403b,寄存器501和502的数据内容:1)被呈现给混合逻辑部分503a,b,c,d;2)由混合逻辑部分503a,b,c,d处理;以及,3)由置换逻辑507置换。取决于实现,置换的结果可以在指令阶段403b结束时锁存到闩锁508中。请注意,指令阶段403b的计算对应于完整的一轮Skein 512的计算。
在一个实施例中,执行是微编码的,并包括只读存储器(ROM)515,该只读存储器(ROM)515包括实现一个表的微代码516a,b,c,d,该表包括旋转器在每一个混合部分逻辑和在每一级504a,b,c,d中的恰当旋转控制信息。对于Skein 512,如在图3d中观察到的,旋转器值是轮数模8的函数(以及512比特内部状态中的四倍长字的位置)。因此,应该向执行单元提供是否正在执行1到4轮或5到8轮。在一个实施例中,还在立即操作数中指定此信息。
指令阶段403c到403e类似地进行,且分别在随后的级504b,504c和504d中,在每一个这样的周期结束时,计算完整的一轮Skein 512(如果需要,则锁存)。在指令阶段403e结束时,最初在指令阶段403b从寄存器501和502中读取的数据的四轮已经被完全计算并被呈现在级504d的置换逻辑的输出处。在图5a的实施例中,来自级504d的置换逻辑的结果被写入到两个单独的闩锁510,511。
闩锁510对应于四轮计算的512比特结果的256比特“左半部”。闩锁511对应于512比特结果的256比特“右半部”。在指令阶段403f,这些256比特闩锁510,511中的一个的内容作为指令的结果被提供。即,指令被设计成提供512比特结果的一半。在一个实施例中,由指令提供左半部还是提供右半部是在指令的指令格式中所包括的立即操作数中指定的。
指令的只提供左半部还是右半部的理由是,执行单元被设计成利用仅使操作数保持256比特那么大的“256比特”寄存器空间来操作。如此,结果被存储到的目的地寄存器只能处理最终计算的左半部或右半部。在一个实施例中,以这样的方式使用256比特寄存器空间:每个256比特操作数的四个四倍长字被视为大小为四的矢量的不同的元素(即,具有等于4的元素数量)。
尽管如此,执行单元的多级设计允许连续指令在执行中的流水线化,以便在向执行单元发出两个连续指令结束时,计算了整个512比特计算。即,第一指令提供一半(例如,左半部),而第二指令提供另一半(例如,右半部)。
参见示出了目标代码表示的图4a和图6a中的示例。这里,向执行单元发出第一指令601,其立即操作数指定一个半部。第一指令601通过流水线周期402a,b,c,被执行,如上文对于过程401所描述的。在下一流水线周期402b,向执行单元发出第二指令602。指令602的执行通过图4的过程410来表示。
注意,过程410遵循第一指令的相同过程(过程401),但是,在稍后指令阶段,流过相同级。例如,在指令阶段403c,在级504c,为第一指令计算第三轮,而同时,在级504b,为第二指令计算第二轮。如此,以流水线方式,通过执行单元来执行两个指令。图6a还示出了随后的加法指令603,604的执行,这些加法指令603,604分别将256比特左和256比特右侧半部子密钥值(保留在R5和R6中)与第一和第二指令601,602的结果(存储在R3和R4中)相加,以通过子密钥值的加法,获取四轮的512比特内部状态。理解应该将初始子密钥值(子密钥0)与初始操作数数据相加,随后,可以将图6a中观察到的“内核”重复/循环18次,以完全计算Skein 512散列。值得注意的是,加法指令603,604写回到初始操作数位置R1和R2。在重复图6a的循环时,到Skein算法所需的程度,可以将新子密钥值移到R5和R6。这样的移动可以利用内核中所包括的一个或多个移动指令(图6a中未示出)来实现。
图4b,5b和6b涉及其中使用512比特寄存器的另一实施例。在此情况下,可以从单个寄存器获取整个初始操作数数据(保留在R2中),并且在第三流水线周期(第六指令周期)呈现(在R3中)四轮的整个512比特结果。通过下面的单个ADD指令605,通过四轮,利用随后的子密钥加法,将512比特子密钥值(保留在R4中)与指令结果相加,以产生512比特内部状态。再次,理解应该将初始子密钥值(子密钥0)与初始操作数数据相加,随后,可以将图6B中观察到的“内核”重复/循环18次,以完全计算Skein 512散列(再次,向R4的子密钥值移动操作还可以被包括在内核中)。
也可以在上文所描述的任何一个执行单元中计算Skein 256指令,但是,只使用输入寄存器空间的半部。附加的微代码表可以被包括在ROM中,以计及Skein 256对Skein 512的不同的旋转。另外,置换块也可以处于微代码控制的控制下,且不同的表为Skein 256和Skein 512指定不同的置换模式。Skein 1024指令可以通过将每一级的混合部分数目从8扩展到十六个,或使用内部流水线化和/或混合部分重复使用来执行单个指令来实现,如下面进一步详细描述的。对于可以执行Skein 256、Skein 512和Skein 1024操作的执行单元,对于Skein 256、Skein 512和Skein 1024指令中的每一个的旋转和置换,可以将微代码表相加。
图7a示出了用于利用单个指令SKEIN_512来计算四轮Skein散列算法的指令阶段序列,其中,单个指令包括反馈路径并重复使用相同的混合逻辑来在单个指令中执行多轮。再次,Skein 512实现被称为示例。
在一个实施例中,指令是SKEIN_512R3;R1;R2;imm的形式,其中,R3是矢量寄存器空间中的目的地寄存器的位置,其中存储了SKEIN_512指令的结果,而R1和R2是提供用于计算的输入操作数的输入寄存器。在特定实施例中,R1,R2和R3每一个都是256比特寄存器。如此,R1和R2一起对应于Skein 512散列算法使用的512比特的总输入操作数数据(即,8个四倍长字)。
此外,在目的地R3也只是256比特宽的情况下,指令的结果只能是在四轮计算之后计算出的完整的512比特的下半部或上半部(内部地,SKEIN_512指令理解计算四轮所需的完全512比特的内部状态)。指令格式的立即值imm指定在四轮计算之后,SKEIN_512指令是否将提供完全512比特结果的下半部或上半部。
图8a示出了执行SKEIN_512指令的执行单元800的逻辑设计的实施例。在一个实施例中,参考图7a和8a,在SKEIN指令701的第一阶段,SKEIN_512指令接受来自R2,R3矢量寄存器空间的八个四倍长字(512比特)作为输入操作数信息,将值存储到局部寄存器空间801,802中。一开始,寄存器空间801保存从R2加载的四个四倍长字,而寄存器空间802保存从R3加载的四个四倍长字。
如此,寄存器空间801保存对应于512比特内部状态的“左边半部”的256数据比特结构,而寄存器空间802保存对应于512比特内部状态的“右边半部”的256数据结构。在紧接下面比较详细地描述的下面的指令阶段,指令进行四轮计算,并根据立即操作数,将结果的256比特下半部或上半部写入到256比特目的地寄存器空间R3。
如在图8a中观察到的,执行单元800包括足以并行地计算两个混合操作的逻辑。即,执行单元800包括:1)第一逻辑部分803a,其具有加法器804a、旋转器805a和异或门806a,用以对输入寄存器801和802的内容的“左半部”执行第一混合操作的计算;以及,2)第二逻辑部分803b,其包括加法器804b、旋转器805b和异或门806b,用以对输入寄存器801和802的内容的“右边半部”执行第二混合操作的计算。逻辑部分对803a和803b并行地操作,以同时计算四个四倍长字(256比特)作为混合层输出。
由于Skein 512算法的完全内部状态要求八个四倍长字(512个比特),而并行操作的两个逻辑部分803a,b一次至多只能产生256个比特的内部状态信息,因此,执行单元800被设计成以流水线方式处理寄存器801,802中的两个256输入操作数寄存器的内容。
即,在一个实施例中,在第二指令阶段702中,输入寄存器801的内容最初被提供给第一和第二逻辑部分803a,b,然后,在同一第二指令阶段702,输入寄存器802的内容被提供给相同的逻辑部分803a,b。
在第二阶段702的执行过程中,响应于寄存器801的内容向逻辑部分803a,b的呈现,发生下列操作:1)将分别被呈现给逻辑部分803a和803b的左边和右边四倍长字相加;2)对被呈现给逻辑部分803a,b两者的右边的四倍长字执行旋转操作;3)将上面的1)的加法的结果与来自上面的2)的旋转的结果作异或操作;以及,4)通过置换块807,置换上面的3)的异或的结果,并在符合Skien散列算法所使用的置换模式的位置处(下面进一步比较详细地描述)将它们锁存到寄存器811,812中。
相对于上面所描述的最后一个操作4),在一个实施例中,参考图3c和图8a,对于从寄存器801流出的值,执行下面的置换:1)逻辑803a的输出处的左边四倍长字809_1被置换831到寄存器812的位置812_3;2)逻辑部分803a的输出处的右边四倍长字809_2被置换832到寄存器811的位置811_2;3)逻辑部分803b的输出处的左边四倍长字809_3被置换833到寄存器811的位置811_1;以及,4)逻辑部分802b的输出处的右边四倍长字809_4被置换834到寄存器812的位置812_4。
比较上述利用图3c的讨论,读者将认识到,在图3c中观察到的置换方案的半部被表示在寄存器811和812中,其中,寄存器811被视为包含内部状态信息的左半部的256比特寄存器,而寄存器812被视为包含内部状态信息的右半部的256比特寄存器。
第二阶段702也可以被流水线化,以与对于寄存器801的内容相同的方式处理寄存器802的内容,但是在后面的相应的时钟周期,并带有不同的置换模式。例如,在第二阶段702开始时,在寄存器801的内容被呈现给逻辑部分803a,b时,且在附加的数量的后面的时钟周期已过去足以让逻辑部分803a,b对寄存器801的内容执行它们的相应的操作并将结果置换到寄存器811,812之后,可以向逻辑部分803a,b呈现寄存器802的内容。
再次参考图3c和图8a,根据寄存器802的内容计算出的加法和异或值的置换方案如下:1)逻辑803a的输出处的左边四倍长字809_1被置换835到寄存器811的位置811_3;2)逻辑部分803a的输出处的右边四倍长字809_2被置换836到寄存器812的位置812_2;3)逻辑部分803b的输出端处的左边四倍长字809_3被置换837到寄存器812的位置812_1;以及,4)逻辑部分802b的输出处的右边四倍长字809_4被置换838到寄存器811的位置811_4。
第二指令阶段702完成,且来自寄存器802的内容的加法和异或结果被置换并存储在寄存器811和812中。第二指令阶段702的完成对应于第一轮的完成,且下一轮的数据值被适当地对齐,并且准备好供用在寄存器811和812中。
如此,第三指令阶段703通过如上文对于第二指令阶段所描述的同一组操作开始该序列。然而,第三指令阶段703从寄存器811而不是寄存器801读取输入值(但是,以与寄存器801相同的方式,如上文对于第二指令阶段702所描述的)。类似地,第三指令阶段703从寄存器812而不是寄存器802读取输入值(但是,以与寄存器802相同的方式,如上文对于第二指令阶段702所描述的)。在第三指令阶段703完成时,两轮完成。
与上文所描述的第三指令阶段703相类似,执行两个另外的指令阶段,第四指令阶段704和第五指令阶段705。如此,在第五指令阶段705结束时,第五轮的计算完成。在第六指令阶段706,取决于指令中的立即操作数是否指定512比特结果的下半部或上半部,寄存器811或812的内容被写入到目的地寄存器R3。
在一个实施例中,执行单元800是微编码的,并且在只读存储器(ROM)816中,不仅存储通过四轮的四个循环建立程序流程控制的微代码817,而且还保留旋转器逻辑电路805a,b和置换逻辑块807的控制表818,819。这里,控制表818,819两者都可以实现为一种查询表,该查询表利用每新一轮/循环查询新的一组控制值。
即,相对于旋转器电路805a,b,从图3d的讨论可以看出,将执行的旋转量是正被执行的特定的轮和散列算法的8四倍长字(512比特)内部状态内的四倍长字的位置的函数。在图8a的设计中,对任一旋转器,两个参数在每一轮的基础上变化。即,每一新循环都对应于不同的轮,并且内部状态中的相应的字的位置也随着每一轮切换(toggle)(在第一轮中,逻辑部分803a处理最左边的字,而部分803b处理第三和第四最左边的字,相比之下,在第二轮中,逻辑部分803a处理第三和第四最右边的字,而逻辑部分803b处理最右边的字)。
类似地,对四倍长字有影响的置换也是512比特内部状态中的字的位置的函数。如此,利用每一循环从控制表818,819中读取控制值,并且分别将它们应用于旋转器电路805a,b和置换块807,以影响通过循环处理的对于四倍长字的正确旋转和置换。
图9a示出了使用上文所讨论的SKEIN_512指令来计算完整的Skein512散列算法的目标代码序列。如在图9a中观察到的,第一SKEIN_512指令在第一指令流水线周期911中被执行901。第一SKEIN_512指令的立即操作数指示是否将返回由指令计算出的四轮的512比特结果的下半部或上半部。对于示例,假设将返回下半部。
在第二指令流水线周期912,第二SKEIN_512指令902开始被执行,并且第一SKEIN_512指令901继续其操作。这里,出于示例的目的,假设每个指令流水线周期有两个指令阶段。回想一下,上文参照图7a和8a所讨论的SKEIN_512指令消耗六个指令阶段,在此示例中,因此,单个SKEIN_512指令的执行消耗三个指令流水线周期。
为了并行地执行两个SKEIN_512指令,如在图9a中观察到的,可以利用图8a的逻辑来设计两个不同的执行单元。这里,例如,同一流水线可以包括两个不同的执行单元,每一个执行单元都支持SKEIN_512指令。如此,流水线中的第一执行单元将执行第一SKEIN_512指令901,而第二执行单元将执行第二SKEIN_512指令902。可另选地,计算系统可以包括耦合到相同寄存器空间的两个流水线。这里,第一流水线可以执行第一SKEIN_512指令901,而第二流水线可以执行第二SKEIN_512指令902。
在第三指令流水线周期913,第一SKEIN_512指令完成,并将四轮计算的下半部写入到R3,并且第二SKEIN_512指令跨其第三和第四内部阶段继续计算。
在第四指令流水线周期914,第二SKEIN_512指令完成,并将四轮计算的上半部写入到R4。此外,存储在R5中的、在四轮之后将被添加到512比特内部状态的子密钥值的下半部,将通过ADD指令903,与R3中的第一SKEIN_512指令的结果相加。结果存储在R1中。可以使用算术标志来处理来自加法的需要被波动到上半部分量的后面的加法的任何进位(carry)。
在第五指令流水线周期915中,另一ADD指令904将存储在R4中的上部(upper)轮计算的上半部与存储在R6中的子密钥的上半部相加。来自下半部ADD 903的任何进位也被考虑。结果存储在R2中。此时,下一四轮的计算以及后面的子密钥加法的输入四倍长字存储在R1(下半部)和R2(上半部)中。可以再次使用R1和R2的内容,对于四轮的计算以及后面的子密钥加法,重复在图9a中观察到的周期的相同序列。
在图9a中观察到的指令序列的执行之间,可以将接下来的子密钥值移到R5和R7,以保持相同的寄存器的使用,或者,下一指令序列可以引用下一子密钥值的不同的寄存器。图9a的序列可以重复18次,以计算整个Skein 512散列值。在图9a中未示出初始子密钥加法(参见图3a的加法300)。此加法将利用在程序所使用的第一SKEIN_512指令前面的加法指令来完成。
图7b,8b和9b涉及应该比图7a,8a,9a的SKEIN_512指令更快的另一SKEIN_512指令设计。基本上,SKEIN_512指令的设计包括四个混合逻辑部分A,B,C,D,而并非诸如在图8a观察到的两个部分803a,b,以使得对内部512比特状态的下半部和上半部的计算在单轮的计算过程中不必以串行流水线方式计算。相反,并行地同时计算两个半部。如此,对单轮的计算应该消耗较少的时钟周期。图8a的设计和图8b的设计之间的其他显著的差异是:i)对可能会影响旋转器或置换控制的512比特内部状态中的四倍长字位置的任何依赖关系不再适用,因为512比特状态中的相同的位置的四倍长字流过相同混合逻辑部分;以及,ii)已经消除了寄存器811和812(置换块可以直接写入到输入寄存器)。
如在图9b中观察到的,如果图8b的更快的SKEIN_512指令仍消耗三个指令流水线周期才能完成,则用于影响带有子密钥加法的四轮的计算的指令序列由于256比特寄存器大小,仍遵循图9a的相同指令序列。图7a,8a,9a的SKEIN_512指令还可能需要四个指令周期才能完成——给定其比较长的每轮时钟周期消耗。如果是,图9a的指令序列将消耗六个,而并非五个指令,以计及附加的流水线周期。
图7c,8c和9c涉及使用512比特寄存器的SKEIN_512指令。这里,类似于图8b的skein_512指令,图8c的SKEIN_512指令使用四个混合逻辑单元来并行地处理全部512比特的输入四倍长字数据,并保持完全的512比特内部状态宽度。此外,由于机器的寄存器大小还是512比特且不局限于256比特,如在图9c中观察到的,可以消除图9a和9b的指令序列中的一个指令(再次假设执行SKEIN_512指令需要三个指令流水线周期),因为四轮计算的完整结果可以被写回到单个结果寄存器中,而并非不得不将结果拆分到两个不同的寄存器(一个用于结果的下半部,另一个用于结果的上半部)。除此之外,图8c的执行的操作与图8b的执行单元差不多相同。
还可以实现计算Skein 256和Skein 1024算法的额外的指令。例如,可以实现支持SKEIN_256指令的执行单元,其设计非常类似于图8b的设计——只是它只使用一个256比特输入操作数寄存器,因此,没有第二波的256比特宽数据以串行流水线方式流过单元以计算单轮。同样,还可以实现非常像在图8a中所描述的执行单元那样操作但是其占用空间更类似于图8c的设计的执行单元,以支持SKEIN_1024指令。这里,用于计算SKEIN_1024指令的执行单元将具有在一轮过程中以流水线方式串行计算的两个512比特输入操作数寄存器(类似于图8a的执行单元的操作)。类似于图8c中的执行单元的设计,SKEIN_1024指令单元将具有四个混合逻辑部分(但是将具有一对512输入操作数寄存器,而并非一个512比特输入操作数寄存器)。替换实施例可以力求具有可以并行地对十六个四倍长字进行操作的八个混合逻辑部分。
可以实现这样的指令,四倍长字的数据值被表达为64比特整数,而不是64比特浮点值(虽然也可以使用浮点值)。
图10示出了计算系统(例如,计算机)的实施例。图10的示例性计算系统包括:1)可以被设计为包括两个和三个寄存器标量整数和矢量指令执行的一个或多个处理核1001;2)存储器控制中枢(MCH)1002;3)系统存储器1003(存在不同类型,诸如DDR RAM、EDO RAM等);4)缓存1004;5)I/O控制中枢(ICH)1005;6)图形处理器1006;7)显示器/屏幕1007(存在不同类型,诸如阴极射线管(CRT)、平板、薄膜晶体管(TFT)、液晶显示器(LCD)、DPL等等))一个或多个I/O设备1008。
一个或多个处理核1001执行指令,以便执行计算系统实现的任何软件例程。指令频繁地涉及对数据执行的某种操作。数据以及指令两者都存储在系统存储器1003和缓存1004中。缓存1004通常被设计为比系统存储器1003具有较短的延迟时间。例如,缓存1004可以被集成到与处理器相同的硅芯片中,和/或被构建为带有更快的SRAM单元,而系统存储器1003可以被构建为带有较慢的DRAM单元。通过倾向于将比较频繁地使用的指令和数据存储在缓存1004中而不是系统存储器1003中,计算系统的总体性能效率改善。
故意使系统存储器1003对计算系统内的其他组件可用。例如,从计算系统的各种接口(例如,键盘和鼠标、打印机端口、LAN端口、调制解调器端口等等)接收到的或从计算系统的内部存储元件(例如,硬盘驱动器)中检索到的数据在软件程序的实现中在它们被一个或多个处理器1001操作之前常常临时排队到系统存储器1003中。类似地,软件程序确定应该通过计算系统接口中的一个从计算系统发送到外面的实体或存储到内部存储元件的数据在其被传输或存储之前常常临时在系统存储器1003中排队。
ICH 1005负责确保这样的数据适当地在系统存储器1003和其合适的对应的计算系统接口(以及内部存储设备,如果计算系统如此设计的话)之间传递。MCH 1002负责管理处理器1001、接口以及内部存储元件之间的可能在时间上相对于彼此接近地出现的各种竞争的对系统存储器1003访问的请求。
一个或多个I/O设备1008还在典型的计算系统中实现。I/O设备一般负责向和/或从计算系统(例如,网络适配器)传输数据;或者,对于计算系统内的大规模非易失性存储器(例如,硬盘驱动器)。ICH 1005在其本身和观察到的I/O设备1008之间具有双向的点对点链路。
通过以上的讨论所讲述的过程可以利用诸如机器可执行指令之类的导致机器执行这些指令以执行某些功能的程序代码来执行。在此上下文中,“机器”可以是将中间形式(或“抽象”)指令转换为处理器特定的指令(例如,诸如“虚拟机”(例如,Java虚拟机)之类的抽象执行环境、解释器、公共语言运行时、高级语言虚拟机等等)的机器,和/或,诸如通用处理器和/或专用处理器之类的被设计用于执行指令的位于在半导体芯片上的电子线路(例如,利用晶体管实现的“逻辑电路”)。通过以上的讨论讲述的过程也可以由被设计用于执行过程(或其一部分)的电子线路来执行(代替机器或与机器相结合),而不执行程序代码。
可以相信,通过以上的讨论讲述的过程也可以以由各种软件开发框架(例如,Microsoft Corporation的.NET、Mono、Java、Oracle Corporation的Fusion等等)支持的各种面向对象的或非面向对象的计算机编程语言(例如,Java、C#、VB、Python、C、C++、J#、APL、Cobol、Fortran、Pascal、Perl等等)以源级程序代码来描述。源级程序代码可以被转换为抽象执行环境(例如,Java虚拟机、公共语言运行库、高级语言虚拟机、解释器等等)可理解的程序代码(诸如爪哇字节代码、Microsoft中间语言、等等)的中间形式,或可以直接编译为目标代码。
根据各种方法,抽象执行环境可以将中间形式程序代码转换为处理器特定的代码,通过:1)编译中间形式程序代码(例如,在运行时(例如,JIT编译器)),2)解释中间形式程序代码,或3)在运行时编译中间形式程序代码和解释中间形式程序代码的组合。抽象执行环境可以在各种操作系统(诸如UNIX、LINUX、Microsoft操作系统,包括Windows系列、Apple计算机操作系统,包括MacOS X、Sun/Solaris、OS/2、Novell等等)上运行。
可以使用制品来存储程序代码。存储程序代码的制品可以被具体化为,但不仅限于,一个或多个存储器(例如,一个或多个闪存、随机访问存储器(静态、动态或其他))、光盘、CD-ROM、DVD ROM、EPROM、EEPROM、磁卡或光卡或其他类型的适于存储电子指令的机器可读取的介质。程序代码也可以通过在传播介质中实现的数据信号(例如,通过通信链路(例如,网络连接))从远程计算机(例如,服务器)下载到发出请求的计算机(例如,客户端)。
在前述的说明书中,参考其特定示例性实施例描述了本发明的各实施例。然而,显而易见的是,在不偏离如在所附权利要求书中阐述的本发明的较广泛的精神和范围的情况下,可以作出各种修改方案和改变。
权利要求书(按照条约第19条的修改)
1.一种设备,包括:
指令流水线内的执行单元,所述执行单元具有多级下列电路:
a)包括多个混合逻辑部分的第一逻辑电路部分,每一个混合逻辑部分都包括:
i)接收第一四倍长字的第一输入和接收第二四倍长字的第二输入;
ii)加法器,其具有分别耦合到所述第一和第二输入的一对输入;
iii)旋转器,其具有耦合到所述第二输入的相应输入;
iv)异或门,其具有耦合到所述加法器的输出的第一输入和耦合到所述旋转器的输出的第二输入;
所述第一逻辑电路部分还具有只读存储器(ROM),所述只读存储器(ROM)包含用于所述多个混合逻辑部分的所述旋转器的控制值;
b)置换逻辑电路,其具有耦合到所述相应的加法器和所述多个混合逻辑部分的异或门输出的输入。
2.如权利要求1所述的设备,其特征在于,所述Skein散列算法是Skein256散列算法。
3.如权利要求1所述的设备,其特征在于,所述Skein散列算法是Skein512散列算法。
4.如权利要求1所述的设备,其特征在于,所述Skein散列算法是Skein1024散列算法。
5.如权利要求1所述的设备,其特征在于,所述多轮是四轮。
6.一种方法,包括:
通过在单个指令的所述执行期间执行下列操作,来通过所述单个指令的执行,计算多轮Skein散列算法:
利用第一混合逻辑电路将第一和第二四倍长字相加以创建第一结果,以及将第三和第四四倍长字相加以创建第二结果;
利用所述第一混合逻辑电路旋转所述第二四倍长字以创建第三结果,以及旋转所述第四四倍长字以创建第四结果,所述旋转是通过从只读存储器(ROM)读取并被应用于执行所述旋转的逻辑电路的信息来控制的;
利用所述第一混合逻辑电路对所述第一结果和所述第三结果作异或操作以创建第五结果,以及,对所述第二结果和所述第四结果作异或操作以创建第六结果;以及,
通过利用所述第一混合逻辑电路置换所述第一、第二、第五和第六结果,来创建新的第一、第二、第三和第四四倍长字,以及,利用在所述第一混合逻辑电路下游的后续级第二混合逻辑电路来对所述新的第一、第二,第三以及第四四倍长字执行所述加法、所述旋转和所述异或。
7.如权利要求6所述的方法,其特征在于,还包括执行所述创建和所述重复多次,以使得在利用所述第一混合逻辑电路、所述第二混合逻辑电路以及在所述第二混合逻辑电路下游的第三和第四混合逻辑执行所述指令的过程中,对于相应的四倍长字执行所述加法、所述旋转、所述异或四次。
8.如权利要求6所述的方法,其特征在于,还包括
利用与所述第一混合逻辑电路在相同级的第三混合逻辑电路,与所述第一和第二四倍长字的所述加法以及所述第三和第四四倍长字的所述加法同时地,将第五和第六四倍长字相加,并将第七和第八四倍长字相加。
9.如权利要求6所述的方法,其特征在于,还包括从所述只读存储器中读取第一控制值,并对执行所述旋转的旋转器应用所述第一控制值。
10.如权利要求9所述的方法,其特征在于,所述第一控制值是至少部分地由包含在所述指令的格式中的立即操作数来确定的。
11.如权利要求6所述的方法,其特征在于,所述Skein散列算法是Skein256散列算法。
12.如权利要求6所述的方法,其特征在于,所述Skein散列算法是Skein512散列算法。
13.如权利要求6所述的方法,其特征在于,所述Skein散列算法是Skein1024散列算法。
14.一种包含程序代码的机器可读存储介质,所述程序代码在由计算机的处理器处理时导致方法被执行,所述方法包括:
执行第一指令,所述第一指令执行多轮Skein散列算法;
执行ADD指令以将所述第一指令的结果与第一子密钥值相加;
再次执行所述第一指令,以执行附加的多轮所述Skein散列算法;以及,
再次执行所述ADD指令以将所述第一指令的所述第二执行的结果与第二子密钥值相加。
15.如权利要求14所述的机器可读介质,其特征在于,还包括在所述第一指令和所述ADD指令之间执行另一指令,所述另一指令提供与第一指令所提供的不同的、所述多轮所述Skein散列算法的所述结果的不同的部分。
16.如权利要求14所述的机器可读介质,其特征在于,所述Skein散列算法是Skein 256散列算法。
17.如权利要求14所述的机器可读介质,其特征在于,所述Skein散列算法是Skein 512散列算法。
18.如权利要求14所述的机器可读介质,其特征在于,所述Skein散列算法是Skein 1024散列算法。
19.一种设备,包括:
指令流水线内的执行单元,所述执行单元具有:
a)第一逻辑电路部分,其包括接收第一四倍长字的第一输入和接收第二四倍长字的第二输入,所述第一逻辑电路部分具有:
i)加法器,其具有分别耦合到所述第一和第二输入的一对输入;
ii)旋转器,其具有耦合到所述第二输入的相应输入;
iii)异或门,其具有耦合到所述加法器的输出的第一输入和耦合到所述旋转器的输出的第二输入;
b)置换逻辑电路,其具有耦合到所述加法器的所述输出的第一输入和耦合到所述异或门的输出的第二输入;
c)从所述置换逻辑电路的第一输出到所述第一逻辑电路的所述第一输入以及从所述置换逻辑电路的第二输出到所述第一逻辑电路的第二输入的反馈路径;
d)微代码存储电路,其用于存储控制在单个指令的执行过程中通过所述第一逻辑电路和所述置换逻辑电路的Skein散列算法的多轮计算的微代码。

Claims (20)

1.一种设备,包括:
指令流水线内的执行单元,所述执行单元具有多级下列电路:
a)包括多个混合逻辑部分的第一逻辑电路部分,每一个混合逻辑部分都包括:
i)接收第一四倍长字的第一输入和接收第二四倍长字的第二输入;
ii)加法器,其具有分别耦合到所述第一和第二输入的一对输入;
iii)旋转器,其具有耦合到所述第二输入的相应输入;
iv)异或门,其具有耦合到所述加法器的输出的第一输入和耦合到所述旋转器的输出的第二输入;
b)置换逻辑电路,其具有耦合到所述相应的加法器和所述多个混合逻辑部分的异或门输出的输入。
2.如权利要求1所述的设备,其特征在于,所述执行单元进一步具有:
ROM,其包含用于所述多个混合逻辑部分的所述旋转器的控制值。
3.如权利要求1所述的设备,其特征在于,所述Skein散列算法是Skein256散列算法。
4.如权利要求1所述的设备,其特征在于,所述Skein散列算法是Skein512散列算法。
5.如权利要求1所述的设备,其特征在于,所述Skein散列算法是Skein1024散列算法。
6.如权利要求1所述的设备,其特征在于,所述多轮是四轮。
7.一种方法,包括:
通过在单个指令的所述执行期间执行下列操作,来通过所述单个指令的执行,计算多轮Skein散列算法:
利用第一混合逻辑电路将第一和第二四倍长字相加以创建第一结果,以及将第三和第四四倍长字相加以创建第二结果;
利用所述第一混合逻辑电路旋转所述第二四倍长字以创建第三结果,以及旋转所述第四四倍长字以创建第四结果;
利用所述第一混合逻辑电路对所述第一结果和所述第三结果作异或操作以创建第五结果,以及,对所述第二结果和所述第四结果作异或操作以创建第六结果;以及,
通过利用所述第一混合逻辑电路置换所述第一、第二、第五和第六结果,来创建新的第一、第二、第三和第四四倍长字,以及,利用在所述第一混合逻辑电路下游的后续级第二混合逻辑电路来对所述新的第一、第二,第三以及第四四倍长字执行所述加法、所述旋转和所述异或。
8.如权利要求7所述的方法,其特征在于,还包括执行所述创建和所述重复多次,以使得在利用所述第一混合逻辑电路、所述第二混合逻辑电路以及在所述第二混合逻辑电路下游的第三和第四混合逻辑执行所述指令的过程中,对于相应的四倍长字执行所述加法、所述旋转、所述异或四次。
9.如权利要求7所述的方法,其特征在于,还包括
利用与所述第一混合逻辑电路在相同级的第三混合逻辑电路,与所述第一和第二四倍长字的所述加法以及所述第三和第四四倍长字的所述加法同时地,将第五和第六四倍长字相加,并将第七和第八四倍长字相加。
10.如权利要求7所述的方法,其特征在于,还包括从只读存储器中读取第一控制值,并对执行所述旋转的旋转器应用所述第一控制值。
11.如权利要求10所述的方法,其特征在于,所述第一控制值是至少部分地由包含在所述指令的格式中的立即操作数来确定的。
12.如权利要求7所述的方法,其特征在于,所述Skein散列算法是Skein256散列算法。
13.如权利要求7所述的方法,其特征在于,所述Skein散列算法是Skein512散列算法。
14.如权利要求7所述的方法,其特征在于,所述Skein散列算法是Skein1024散列算法。
15.一种包含程序代码的机器可读存储介质,所述程序代码在由计算机的处理器处理时导致方法被执行,所述方法包括:
执行第一指令,所述第一指令执行多轮Skein散列算法;
执行ADD指令以将所述第一指令的结果与第一子密钥值相加;
再次执行所述第一指令,以执行附加的多轮所述Skein散列算法;以及,
再次执行所述ADD指令以将所述第一指令的所述第二执行的结果与第二子密钥值相加。
16.如权利要求15所述的机器可读介质,其特征在于,还包括在所述第一指令和所述ADD指令之间执行另一指令,所述另一指令提供与第一指令所提供的不同的、所述多轮所述Skein散列算法的所述结果的不同的部分。
17.如权利要求15所述的机器可读介质,其特征在于,所述Skein散列算法是Skein 256散列算法。
18.如权利要求15所述的机器可读介质,其特征在于,所述Skein散列算法是Skein 512散列算法。
19.如权利要求15所述的机器可读介质,其特征在于,所述Skein散列算法是Skein 1024散列算法。
20.一种设备,包括:
指令流水线内的执行单元,所述执行单元具有:
a)第一逻辑电路部分,其包括接收第一四倍长字的第一输入和接收第二四倍长字的第二输入,所述第一逻辑电路部分具有:
i)加法器,其具有分别耦合到所述第一和第二输入的一对输入;
ii)旋转器,其具有耦合到所述第二输入的相应输入;
iii)异或门,其具有耦合到所述加法器的输出的第一输入和耦合到所述旋转器的输出的第二输入;
b)置换逻辑电路,其具有耦合到所述加法器的所述输出的第一输入和耦合到所述异或门的输出的第二输入;
c)从所述置换逻辑电路的第一输出到所述第一逻辑电路的所述第一输入以及从所述置换逻辑电路的第二输出到所述第一逻辑电路的第二输入的反馈路径;
d)微代码存储电路,其用于存储控制在单个指令的执行过程中通过所述第一逻辑电路和所述置换逻辑电路的Skein散列算法的多轮计算的微代码。
CN201180076287.0A 2011-12-22 2011-12-22 用于计算多轮skein散列算法的执行单元的设备和方法 Active CN104067194B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2011/066988 WO2013095547A1 (en) 2011-12-22 2011-12-22 Apparatus and method of execution unit for calculating multiple rounds of a skein hashing algorithm

Publications (2)

Publication Number Publication Date
CN104067194A true CN104067194A (zh) 2014-09-24
CN104067194B CN104067194B (zh) 2017-10-24

Family

ID=48669188

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180076287.0A Active CN104067194B (zh) 2011-12-22 2011-12-22 用于计算多轮skein散列算法的执行单元的设备和方法

Country Status (4)

Country Link
US (2) US9405537B2 (zh)
CN (1) CN104067194B (zh)
TW (1) TWI531966B (zh)
WO (1) WO2013095547A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110569676A (zh) * 2018-06-05 2019-12-13 英飞凌科技股份有限公司 用于转换输入比特序列的加密设备和方法

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8953785B2 (en) * 2012-09-28 2015-02-10 Intel Corporation Instruction set for SKEIN256 SHA3 algorithm on a 128-bit processor
US11257956B2 (en) 2018-03-30 2022-02-22 Intel Corporation Thin film transistor with selectively doped oxide thin film
US11362215B2 (en) 2018-03-30 2022-06-14 Intel Corporation Top-gate doped thin film transistor

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1390324A (zh) * 1999-09-24 2003-01-08 印芬龙科技股份有限公司 在流水线结构的处理器中处理条件转移指令的方法和装置
CN1983162A (zh) * 2005-09-28 2007-06-20 英特尔公司 具有扩展函数的混合模式浮点流水线
CN101553808A (zh) * 2006-04-04 2009-10-07 高通股份有限公司 流水线fft架构和方法
EP2338127A1 (en) * 2008-08-29 2011-06-29 Brown University Cryptographic accumulators for authenticated hash tables

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7177421B2 (en) * 2000-04-13 2007-02-13 Broadcom Corporation Authentication engine architecture and method
US7249255B2 (en) 2001-06-13 2007-07-24 Corrent Corporation Apparatus and method for a hash processing system using multiple hash storage areas
US7242766B1 (en) 2001-11-21 2007-07-10 Silicon Image, Inc. Method and system for encrypting and decrypting data using an external agent
US8285766B2 (en) * 2007-05-23 2012-10-09 The Trustees Of Princeton University Microprocessor shifter circuits utilizing butterfly and inverse butterfly routing circuits, and control circuits therefor
US20100114923A1 (en) 2008-11-03 2010-05-06 Novarra, Inc. Dynamic Font Metric Profiling
JP5552541B2 (ja) * 2009-12-04 2014-07-16 クリプトグラフィ リサーチ, インコーポレイテッド 検証可能な耐漏洩性暗号化および復号化
US8855302B2 (en) * 2011-06-21 2014-10-07 Intel Corporation Apparatus and method for Skein hashing

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1390324A (zh) * 1999-09-24 2003-01-08 印芬龙科技股份有限公司 在流水线结构的处理器中处理条件转移指令的方法和装置
CN1983162A (zh) * 2005-09-28 2007-06-20 英特尔公司 具有扩展函数的混合模式浮点流水线
CN101553808A (zh) * 2006-04-04 2009-10-07 高通股份有限公司 流水线fft架构和方法
EP2338127A1 (en) * 2008-08-29 2011-06-29 Brown University Cryptographic accumulators for authenticated hash tables

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
NIELS FERGUSON: "The Skein Hash Function Family", 《THE SKEIN HASH FUNCTION FAMILY》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110569676A (zh) * 2018-06-05 2019-12-13 英飞凌科技股份有限公司 用于转换输入比特序列的加密设备和方法
CN110569676B (zh) * 2018-06-05 2023-12-05 英飞凌科技股份有限公司 用于转换输入比特序列的加密设备和方法

Also Published As

Publication number Publication date
US9569210B2 (en) 2017-02-14
US20140122839A1 (en) 2014-05-01
WO2013095547A1 (en) 2013-06-27
WO2013095547A9 (en) 2013-09-06
US20160313993A1 (en) 2016-10-27
TW201346735A (zh) 2013-11-16
US9405537B2 (en) 2016-08-02
TWI531966B (zh) 2016-05-01
CN104067194B (zh) 2017-10-24

Similar Documents

Publication Publication Date Title
CN110321525A (zh) 用于稀疏-密集矩阵乘法的加速器
CN104982051B (zh) 用于加速无线安全算法的装置、方法和系统
CN106775592B (zh) 处理器、用于计算系统的方法、机器可读介质和计算机系统
CN107077334A (zh) 从多维阵列预取多维元素块的硬件装置和方法
CN117724763A (zh) 用于矩阵操作加速器的指令的装置、方法和系统
CN104011643A (zh) 打包数据重新安排控制索引产生处理器、方法、系统及指令
CN104011644A (zh) 用于产生按照数值顺序的相差恒定跨度的整数的序列的处理器、方法、系统和指令
CN104011646A (zh) 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令
CN104115114A (zh) 经改进的提取指令的装置和方法
CN109313553B (zh) 用于跨步加载的系统、装置和方法
CN104025033A (zh) 利用控制操纵的simd可变移位和循环
CN104011645A (zh) 用于产生其中在连续位置中的整数相差恒定整数跨度且最小整数从零偏移整数偏移量的整数序列的处理器、方法、系统和指令
CN108292220A (zh) 用于加速图形分析的装置和方法
CN109947474A (zh) 用于有符号字的向量乘法、舍入和饱和的装置和方法
CN107111484A (zh) 四维莫顿坐标转换处理器、方法、系统和指令
CN104185837A (zh) 在不同的粒度等级下广播数据值的指令执行单元
CN108701028A (zh) 用于执行用于置换掩码的指令的系统和方法
CN110321165A (zh) 复数向量融合乘加和复数向量乘法的高效实现
CN104011616A (zh) 改进置换指令的装置和方法
CN104067194A (zh) 用于计算多轮skein散列算法的执行单元的设备和方法
CN110058886A (zh) 用于计算两个区块操作数中的半字节的数量积的系统和方法
CN108369510A (zh) 用于以无序加载的置换的指令和逻辑
CN104081342A (zh) 经改进的插入指令的装置和方法
CN109992243A (zh) 用于矩阵操作的系统、方法和装置
CN112650471A (zh) 用于处理掩蔽数据的处理器和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant