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...