LCOV - code coverage report
Current view: top level - openssh-6.6p1 - hash.c (source / functions) Hit Total Coverage
Test: lcov_coverage_final.info Lines: 23 34 67.6 %
Date: 2014-08-01 Functions: 1 1 100.0 %
Branches: 9 12 75.0 %

           Branch data     Line data    Source code
       1                 :            : /* $OpenBSD: hash.c,v 1.3 2013/12/09 11:03:45 markus Exp $ */
       2                 :            : 
       3                 :            : /* Copied from nacl-20110221/crypto_hash/sha512/ref/hash.c */
       4                 :            : 
       5                 :            : /*
       6                 :            : 20080913
       7                 :            : D. J. Bernstein
       8                 :            : Public domain.
       9                 :            : */
      10                 :            : 
      11                 :            : #include "includes.h"
      12                 :            : 
      13                 :            : #include "crypto_api.h"
      14                 :            : 
      15                 :            : #define blocks crypto_hashblocks_sha512
      16                 :            : 
      17                 :            : static const unsigned char iv[64] = {
      18                 :            :   0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08,
      19                 :            :   0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b,
      20                 :            :   0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b,
      21                 :            :   0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1,
      22                 :            :   0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1,
      23                 :            :   0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f,
      24                 :            :   0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b,
      25                 :            :   0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79
      26                 :            : } ;
      27                 :            : 
      28                 :            : typedef unsigned long long uint64;
      29                 :            : 
      30                 :        108 : int crypto_hash_sha512(unsigned char *out,const unsigned char *in,unsigned long long inlen)
      31                 :            : {
      32                 :            :   unsigned char h[64];
      33                 :            :   unsigned char padded[256];
      34                 :            :   unsigned int i;
      35                 :        108 :   unsigned long long bytes = inlen;
      36                 :            : 
      37         [ +  + ]:       7020 :   for (i = 0;i < 64;++i) h[i] = iv[i];
      38                 :            : 
      39                 :        108 :   blocks(h,in,inlen);
      40                 :        108 :   in += inlen;
      41                 :        108 :   inlen &= 127;
      42                 :        108 :   in -= inlen;
      43                 :            : 
      44         [ +  + ]:       5230 :   for (i = 0;i < inlen;++i) padded[i] = in[i];
      45                 :        108 :   padded[inlen] = 0x80;
      46                 :            : 
      47         [ +  - ]:        108 :   if (inlen < 112) {
      48         [ +  + ]:       7730 :     for (i = inlen + 1;i < 119;++i) padded[i] = 0;
      49                 :        108 :     padded[119] = bytes >> 61;
      50                 :        108 :     padded[120] = bytes >> 53;
      51                 :        108 :     padded[121] = bytes >> 45;
      52                 :        108 :     padded[122] = bytes >> 37;
      53                 :        108 :     padded[123] = bytes >> 29;
      54                 :        108 :     padded[124] = bytes >> 21;
      55                 :        108 :     padded[125] = bytes >> 13;
      56                 :        108 :     padded[126] = bytes >> 5;
      57                 :        108 :     padded[127] = bytes << 3;
      58                 :        108 :     blocks(h,padded,128);
      59                 :            :   } else {
      60         [ #  # ]:          0 :     for (i = inlen + 1;i < 247;++i) padded[i] = 0;
      61                 :          0 :     padded[247] = bytes >> 61;
      62                 :          0 :     padded[248] = bytes >> 53;
      63                 :          0 :     padded[249] = bytes >> 45;
      64                 :          0 :     padded[250] = bytes >> 37;
      65                 :          0 :     padded[251] = bytes >> 29;
      66                 :          0 :     padded[252] = bytes >> 21;
      67                 :          0 :     padded[253] = bytes >> 13;
      68                 :          0 :     padded[254] = bytes >> 5;
      69                 :          0 :     padded[255] = bytes << 3;
      70                 :          0 :     blocks(h,padded,256);
      71                 :            :   }
      72                 :            : 
      73         [ +  + ]:       7020 :   for (i = 0;i < 64;++i) out[i] = h[i];
      74                 :            : 
      75                 :        108 :   return 0;
      76                 :            : }

Generated by: LCOV version 1.9