skalibs

Mirror/fork of https://skarnet.org/software/skalibs/
git clone https://ccx.te2000.cz/git/skalibs
Log | Files | Refs | README | LICENSE

sha256_final.c (826B)


      1 /* ISC license. */
      2 
      3 #include <stdint.h>
      4 
      5 #include <skalibs/bytestr.h>
      6 #include <skalibs/sha256.h>
      7 #include "sha256-internal.h"
      8 
      9 void sha256_final (SHA256Schedule *ctx, char *digest)
     10 {
     11   unsigned char *p = (unsigned char *)digest ;
     12   uint32_t bits[2] = { ctx->bits[0], ctx->bits[1] } ;
     13 
     14   sha256_feed(ctx, 0x80) ;
     15   while (ctx->b != 56) sha256_feed(ctx, 0) ;
     16   sha256_feed(ctx, T8(bits[1]>>24)) ;
     17   sha256_feed(ctx, T8(bits[1]>>16)) ;
     18   sha256_feed(ctx, T8(bits[1]>>8)) ;
     19   sha256_feed(ctx, T8(bits[1])) ;
     20   sha256_feed(ctx, T8(bits[0]>>24)) ;
     21   sha256_feed(ctx, T8(bits[0]>>16)) ;
     22   sha256_feed(ctx, T8(bits[0]>>8)) ;
     23   sha256_feed(ctx, T8(bits[0])) ;
     24   for (uint32_t i = 0 ; i < 8 ; i++)
     25   {
     26     *p++ = T8(ctx->buf[i]>>24) ;
     27     *p++ = T8(ctx->buf[i]>>16) ;
     28     *p++ = T8(ctx->buf[i]>>8) ;
     29     *p++ = T8(ctx->buf[i]) ;
     30   }
     31 }