LCOV - code coverage report
Current view: top level - src - hexmap.c (source / functions) Hit Total Coverage
Test: burp-coverage-clean.info Lines: 48 48 100.0 %
Date: 2016-11-02 Functions: 10 10 100.0 %

          Line data    Source code
       1             : #include "burp.h"
       2             : #include "hexmap.h"
       3             : #include "protocol2/blk.h"
       4             : 
       5             : // FIX THIS: Should be set in configure somewhere.
       6             : #include <openssl/md5.h>
       7             : 
       8             : #define HEXMAP_SIZE     256
       9             : 
      10             : static uint8_t hexmap1[HEXMAP_SIZE];
      11             : static uint8_t hexmap2[HEXMAP_SIZE];
      12             : 
      13             : uint8_t md5sum_of_empty_string[MD5_DIGEST_LENGTH];
      14             : 
      15         756 : static void do_hexmap_init(uint8_t *hexmap, uint8_t shift)
      16             : {
      17             :         uint8_t i;
      18             :         uint8_t h;
      19             :         memset(hexmap, 0, HEXMAP_SIZE);
      20         756 :         for(i='0', h=0x00; i<='9'; i++, h++) hexmap[i]=h<<shift;
      21        4536 :         for(i='a', h=0x0A; i<='f'; i++, h++) hexmap[i]=h<<shift;
      22        4536 :         for(i='A', h=0x0A; i<='F'; i++, h++) hexmap[i]=h<<shift;
      23         756 : }
      24             : 
      25         378 : void hexmap_init(void)
      26             : {
      27         378 :         do_hexmap_init(hexmap1, 4);
      28         378 :         do_hexmap_init(hexmap2, 0);
      29             :         md5str_to_bytes("D41D8CD98F00B204E9800998ECF8427E",
      30             :                 md5sum_of_empty_string);
      31         378 : }
      32             : 
      33       17507 : static void str_to_bytes(const char *str, uint8_t *bytes, size_t len)
      34             : {
      35             :         static uint8_t bpos;
      36             :         static uint8_t spos;
      37             : 
      38      229691 :         for(bpos=0, spos=0; bpos<len && str[spos]; )
      39             :         {
      40      194677 :                 if(str[spos]=='/')
      41             :                 {
      42       51261 :                         spos++;
      43       51261 :                         continue;
      44             :                 }
      45      286832 :                 bytes[bpos++] = hexmap1[(uint8_t)str[spos]]
      46      143416 :                         | hexmap2[(uint8_t)str[spos+1]];
      47      143416 :                 spos+=2;
      48             :         }
      49       17507 : }
      50             : 
      51          42 : void md5str_to_bytes(const char *md5str, uint8_t *bytes)
      52             : {
      53         420 :         str_to_bytes(md5str, bytes, MD5_DIGEST_LENGTH);
      54          42 : }
      55             : 
      56        7419 : char *bytes_to_md5str(uint8_t *bytes)
      57             : {
      58             :         static char str[64];
      59       22257 :         snprintf(str, sizeof(str), "%016" PRIx64 "%016" PRIx64,
      60             :                 htobe64(*(uint64_t *)bytes), htobe64(*(uint64_t *)(bytes+8)));
      61        7419 :         return str;
      62             : }
      63             : 
      64       17087 : uint64_t savepathstr_with_sig_to_uint64(const char *savepathstr)
      65             : {
      66             :         uint8_t b[sizeof(uint64_t)];
      67       17087 :         str_to_bytes(savepathstr, b, sizeof(b));
      68       34174 :         return htobe64(*(uint64_t *)&b);
      69             : }
      70             : 
      71       17689 : static char *savepathstr_make(uint64_t *be_bytes)
      72             : {
      73             :         static char str[15];
      74       17689 :         uint8_t *b=(uint8_t *)be_bytes;
      75      106134 :         snprintf(str, sizeof(str), "%02X%02X/%02X%02X/%02X%02X",
      76      106134 :                 b[0], b[1], b[2], b[3], b[4], b[5]);
      77       17689 :         return str;
      78             : }
      79             : 
      80       17336 : char *uint64_to_savepathstr(uint64_t bytes)
      81             : {
      82       17336 :         uint64_t be_bytes=htobe64(bytes);
      83       17336 :         return savepathstr_make(&be_bytes);
      84             : }
      85             : 
      86           5 : char *uint64_to_savepathstr_with_sig(uint64_t bytes)
      87             : {
      88             :         static char str[20];
      89           5 :         uint64_t be_bytes=htobe64(bytes);
      90           5 :         uint8_t *b=(uint8_t *)&be_bytes;
      91          40 :         snprintf(str, sizeof(str), "%02X%02X/%02X%02X/%02X%02X/%02X%02X",
      92          40 :                 b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7]);
      93           5 :         return str;
      94             : }
      95             : 
      96         353 : char *uint64_to_savepathstr_with_sig_uint(uint64_t bytes, uint16_t *sig)
      97             : {
      98             :         char *str;
      99         353 :         uint64_t be_bytes=htobe64(bytes);
     100         353 :         uint8_t *b=(uint8_t *)&be_bytes;
     101         353 :         str=savepathstr_make(&be_bytes);
     102         353 :         *sig = b[6] << 8;
     103         353 :         *sig |= b[7];
     104         353 :         return str;
     105             : }

Generated by: LCOV version 1.10