LLVMFuzzerTestOneInput:
   42|    298|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   43|       |
   44|    298|  if (!size)
  ------------------
  |  Branch (44:7): [True: 0, False: 298]
  ------------------
   45|      0|    return 0;
   46|       |
   47|    298|  FuzzedDataProvider stream(data, size);
   48|    298|  hash_state *hs;
   49|    298|  if (init(&hs))
  ------------------
  |  |   28|    298|#define init CONCAT_TYPE(_init)
  |  |  ------------------
  |  |  |  |   26|    298|#define CONCAT_TYPE(x) _PASTE2(HASHTYPE, x)
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    298|#define _PASTE2(x,y) _PASTE(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|    298|#define _PASTE(x,y) x##y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (49:7): [True: 0, False: 298]
  ------------------
   50|      0|    return 0;
   51|       |
   52|  1.36k|  while (stream.remaining_bytes()) {
  ------------------
  |  Branch (52:10): [True: 1.23k, False: 129]
  ------------------
   53|  1.23k|    size_t num_bytes = stream.ConsumeIntegral<size_t>();
   54|  1.23k|    std::vector<uint8_t> buffer = stream.ConsumeBytes<uint8_t>(num_bytes);
   55|       |
   56|  1.23k|    if (update(hs, buffer.data(), buffer.size()))
  ------------------
  |  |   29|  1.23k|#define update CONCAT_TYPE(_update)
  |  |  ------------------
  |  |  |  |   26|  1.23k|#define CONCAT_TYPE(x) _PASTE2(HASHTYPE, x)
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.23k|#define _PASTE2(x,y) _PASTE(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|  1.23k|#define _PASTE(x,y) x##y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (56:9): [True: 169, False: 1.06k]
  ------------------
   57|    169|      goto error;
   58|  1.23k|  }
   59|       |
   60|    129|  uint8_t result[DIGEST_SIZE];
   61|       |
   62|    129|#ifndef DIGEST_THIRD_PARAM
   63|    129|  digest(hs, result);
  ------------------
  |  |   30|    129|#define digest CONCAT_TYPE(_digest)
  |  |  ------------------
  |  |  |  |   26|    129|#define CONCAT_TYPE(x) _PASTE2(HASHTYPE, x)
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    129|#define _PASTE2(x,y) _PASTE(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|    129|#define _PASTE(x,y) x##y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   64|       |#else
   65|       |  digest(hs, result, DIGEST_SIZE);
   66|       |#endif
   67|       |
   68|    298|error:
   69|    298|  destroy(hs);
  ------------------
  |  |   31|    298|#define destroy CONCAT_TYPE(_destroy)
  |  |  ------------------
  |  |  |  |   26|    298|#define CONCAT_TYPE(x) _PASTE2(HASHTYPE, x)
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    298|#define _PASTE2(x,y) _PASTE(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|    298|#define _PASTE(x,y) x##y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   70|    298|  return 0;
   71|    129|}

_Z8md2_initPP10hash_state:
   40|    298|{
   41|    298|    hash_state *hs;
   42|       |    
   43|    298|    if (NULL == md2State) {
  ------------------
  |  Branch (43:9): [True: 0, False: 298]
  ------------------
   44|      0|        return ERR_NULL;
  ------------------
  |  |    5|      0|#define ERR_NULL                1
  ------------------
   45|      0|    }
   46|       |
   47|    298|    *md2State = hs = (hash_state*) calloc(1, sizeof(hash_state));
   48|    298|    if (NULL == hs)
  ------------------
  |  Branch (48:9): [True: 0, False: 298]
  ------------------
   49|      0|        return ERR_MEMORY;
  ------------------
  |  |    6|      0|#define ERR_MEMORY              2
  ------------------
   50|       |
   51|    298|    return 0;
   52|    298|}
_Z11md2_destroyP10hash_state:
   55|    298|{
   56|    298|    free(hs);
   57|    298|    return 0;
   58|    298|}
_Z10md2_updateP10hash_statePKhm:
   92|  1.49k|{
   93|  1.49k|    if (NULL == hs || NULL == buf)
  ------------------
  |  Branch (93:9): [True: 0, False: 1.49k]
  |  Branch (93:23): [True: 169, False: 1.32k]
  ------------------
   94|    169|        return ERR_NULL;
  ------------------
  |  |    5|    169|#define ERR_NULL                1
  ------------------
   95|       |
   96|  1.11M|    while (len) {
  ------------------
  |  Branch (96:12): [True: 1.11M, False: 1.32k]
  ------------------
   97|  1.11M|        unsigned left, tc;
   98|       |
   99|  1.11M|        left = 16 - hs->count;   /** 1..16 **/
  100|  1.11M|        tc = (unsigned)MIN(left, len);
  ------------------
  |  |   55|  1.11M|#define MIN(a,b) ((a)<(b)?(a):(b))
  |  |  ------------------
  |  |  |  Branch (55:19): [True: 1.11M, False: 1.32k]
  |  |  ------------------
  ------------------
  101|  1.11M|        memcpy(hs->buf+hs->count, buf, tc);
  102|  1.11M|        hs->count += tc;
  103|  1.11M|        buf += tc;
  104|  1.11M|        len -= tc;
  105|       |        
  106|  1.11M|        if (hs->count==16) {
  ------------------
  |  Branch (106:13): [True: 1.11M, False: 997]
  ------------------
  107|  1.11M|            uint8_t L, t;
  108|  1.11M|            unsigned j;
  109|       |      
  110|  1.11M|            hs->count = 0;
  111|       |
  112|  1.11M|            L = hs->C[15];
  113|  18.9M|            for(j=0; j<16; j++) {
  ------------------
  |  Branch (113:22): [True: 17.8M, False: 1.11M]
  ------------------
  114|  17.8M|                hs->X[16+j] = hs->buf[j];
  115|  17.8M|                hs->X[32+j] = hs->X[16+j] ^ hs->X[j];
  116|       |
  117|       |                /** Update checksum **/
  118|  17.8M|                hs->C[j] ^= S[hs->buf[j] ^ L];
  119|  17.8M|                L = hs->C[j];
  120|  17.8M|            }
  121|       |      
  122|  1.11M|            t = 0;
  123|  21.1M|            for(j=0; j<18; j++) {
  ------------------
  |  Branch (123:22): [True: 20.0M, False: 1.11M]
  ------------------
  124|  20.0M|                unsigned k;
  125|   983M|                for(k=0; k<48; k++) {
  ------------------
  |  Branch (125:26): [True: 963M, False: 20.0M]
  ------------------
  126|   963M|                    hs->X[k] ^= S[t];
  127|   963M|                    t = hs->X[k];
  128|   963M|                }
  129|  20.0M|                t = (t+j) & 0xFF;
  130|  20.0M|            }
  131|  1.11M|        }
  132|  1.11M|    }
  133|  1.32k|    return 0;
  134|  1.49k|}
_Z10md2_digestPK10hash_statePh:
  137|    129|{
  138|    129|    uint8_t padding[16];
  139|    129|    unsigned padlen, i;
  140|    129|    hash_state temp;
  141|       | 
  142|    129|    if (NULL==hs || digest==NULL)
  ------------------
  |  |   30|    129|#define digest CONCAT_TYPE(_digest)
  |  |  ------------------
  |  |  |  |   26|    129|#define CONCAT_TYPE(x) _PASTE2(HASHTYPE, x)
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    129|#define _PASTE2(x,y) _PASTE(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|    129|#define _PASTE(x,y) x##y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (142:9): [True: 0, False: 129]
  |  Branch (142:21): [True: 0, False: 129]
  ------------------
  143|      0|        return ERR_NULL;
  ------------------
  |  |    5|      0|#define ERR_NULL                1
  ------------------
  144|       |
  145|    129|    assert(hs->count < 16);
  146|       |
  147|    129|    temp = *hs;
  148|    129|    padlen = 16 - hs->count;  /** 1..16 **/
  149|  1.36k|    for(i=0; i<padlen; i++) { 
  ------------------
  |  Branch (149:14): [True: 1.23k, False: 129]
  ------------------
  150|  1.23k|        padding[i] = (uint8_t)padlen;
  151|  1.23k|    }
  152|    129|    md2_update(&temp, padding, padlen);
  153|    129|    md2_update(&temp, temp.C, 16);
  154|    129|    memcpy(digest, temp.X, 16);
  ------------------
  |  |   30|    129|#define digest CONCAT_TYPE(_digest)
  |  |  ------------------
  |  |  |  |   26|    129|#define CONCAT_TYPE(x) _PASTE2(HASHTYPE, x)
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    129|#define _PASTE2(x,y) _PASTE(x,y)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|    129|#define _PASTE(x,y) x##y
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|    129|    return 0;
  156|    129|}

