13 `uvm_object_utils_begin(cl_syoscb_hash_md5)
19 extern function new(string name = "cl_syoscb_hash_md5");
28 extern
virtual local function bit [511:0] get_next_512_word(int unsigned word_idx,bit ser[]);
29 extern
virtual local function M [15:0] get_next_32_word(bit [511:0]word);
32 function cl_syoscb_hash_md5::new(string name = "cl_syoscb_hash_md5");
100 s[ 0:15] = { 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22 };
101 s[16:31] = { 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20 };
102 s[32:47] = { 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23 };
103 s[48:63] = { 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 };
105 K[ 0: 3] = {
'hd76aa478, 'he8c7b756,
'h242070db, 'hc1bdceee };
106 K[ 4: 7] = {
'hf57c0faf, 'h4787c62a,
'ha8304613, 'hfd469501 };
107 K[ 8:11] = {
'h698098d8, 'h8b44f7af,
'hffff5bb1, 'h895cd7be };
108 K[12:15] = {
'h6b901122, 'hfd987193,
'ha679438e, 'h49b40821 };
109 K[16:19] = {
'hf61e2562, 'hc040b340,
'h265e5a51, 'he9b6c7aa };
110 K[20:23] = {
'hd62f105d, 'h02441453,
'hd8a1e681, 'he7d3fbc8 };
111 K[24:27] = {
'h21e1cde6, 'hc33707d6,
'hf4d50d87, 'h455a14ed };
112 K[28:31] = {
'ha9e3e905, 'hfcefa3f8,
'h676f02d9, 'h8d2a4c8a };
113 K[32:35] = {
'hfffa3942, 'h8771f681,
'h6d9d6122, 'hfde5380c };
114 K[36:39] = {
'ha4beea44, 'h4bdecfa9,
'hf6bb4b60, 'hbebfbc70 };
115 K[40:43] = {
'h289b7ec6, 'heaa127fa,
'hd4ef3085, 'h04881d05 };
116 K[44:47] = {
'hd9d4d039, 'he6db99e5,
'h1fa27cf8, 'hc4ac5665 };
117 K[48:51] = {
'hf4292244, 'h432aff97,
'hab9423a7, 'hfc93a039 };
118 K[52:55] = {
'h655b59c3, 'h8f0ccc92,
'hffeff47d, 'h85845dd1 };
119 K[56:59] = {
'h6fa87e4f, 'hfe2ce6e0,
'ha3014314, 'h4e0811a1 };
120 K[60:63] = {
'hf7537e82, 'hbd3af235,
'h2ad7d2bb, 'heb86d391 };
131 for (i=0;i<j;i=i+1) begin
132 word=this.get_next_512_word(i,ser);
133 mWords=this.get_next_32_word(word);
141 for (l=0;l<64;l=l+1)begin
142 if(0 <= l && l <= 15) begin
147 else if(16 <= l && l <= 31) begin
152 else if(32 <= l && l<= 47) begin
157 else if(48 <= l && l<= 63) begin
163 F=F+A+K[l] + mWords[g];
167 B=B+((F<<<s[l])|(F>>>(32-s[l])));
177 for (p=0;p< 4;p=p+1) begin
179 for (q=0;q<8;q=q+1)begin
180 a0d[31-p*8-q]=a0[7+(8*p)-q];
181 b0d[31-p*8-q]=b0[7+(8*p)-q];
182 c0d[31-p*8-q]=c0[7+(8*p)-q];
183 d0d[31-p*8-q]=d0[7+(8*p)-q];
189 return {a0d,b0d,c0d,d0d};
190 endfunction : do_hash
193 function bit [511:0] cl_syoscb_hash_md5::get_next_512_word(
int unsigned word_idx,bit ser[]);
197 for (k=0;k<512;k=k+1)begin
198 out[k]=ser[k+512*word_idx];
202 endfunction : get_next_512_word
205 function cl_syoscb_hash_md5::M [15:0] cl_syoscb_hash_md5::get_next_32_word(bit [511:0]word);
212 for (k=0;k<16;k=k+1) begin
213 for (l=0;l<32;l=l+1)begin
221 endfunction : get_next_32_word
virtual tp_hash_digest do_hash(bit ser [])
Hash API: See cl_syoscb_hash_base::do_hash for more details Expects a bitstream with a length which i...
bit< HASH_DIGEST_WIDTH-1:0 > tp_hash_digest
Typedef for a bitstream of HASH_DIGEST_WIDTH bits.
MD5 hash algorithm implementation.
cl_syoscb_hash_packer packer
Handle to a packer suited for this hash algorithm.
Class which defines the base concept of a hash algorithm.
An implementation of a uvm_packer which returns bitstreams that are ready for md5 packing...