ReactOS 0.4.16-dev-2574-g474348f
sha2.h File Reference
#include <basetsd.h>
Include dependency graph for sha2.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _SHA256_CTX
 
struct  _SHA512_CTX
 

Macros

#define SHA256_BLOCK_LENGTH   64
 
#define SHA256_DIGEST_LENGTH   32
 
#define SHA256_DIGEST_STRING_LENGTH   (SHA256_DIGEST_LENGTH * 2 + 1)
 
#define SHA384_BLOCK_LENGTH   128
 
#define SHA384_DIGEST_LENGTH   48
 
#define SHA384_DIGEST_STRING_LENGTH   (SHA384_DIGEST_LENGTH * 2 + 1)
 
#define SHA512_BLOCK_LENGTH   128
 
#define SHA512_DIGEST_LENGTH   64
 
#define SHA512_DIGEST_STRING_LENGTH   (SHA512_DIGEST_LENGTH * 2 + 1)
 

Typedefs

typedef UINT8 sha2_byte
 
typedef UINT32 sha2_word32
 
typedef UINT64 sha2_word64
 
typedef struct _SHA256_CTX SHA256_CTX
 
typedef struct _SHA512_CTX SHA512_CTX
 
typedef SHA512_CTX SHA384_CTX
 

Functions

void SHA256_Init (SHA256_CTX *)
 
void SHA256_Update (SHA256_CTX *, const sha2_byte *, size_t)
 
void SHA256_Final (sha2_byte[SHA256_DIGEST_LENGTH], SHA256_CTX *)
 
charSHA256_End (SHA256_CTX *, char[SHA256_DIGEST_STRING_LENGTH])
 
charSHA256_Data (const sha2_byte *, size_t, char[SHA256_DIGEST_STRING_LENGTH])
 
void SHA384_Init (SHA384_CTX *)
 
void SHA384_Update (SHA384_CTX *, const sha2_byte *, size_t)
 
void SHA384_Final (sha2_byte[SHA384_DIGEST_LENGTH], SHA384_CTX *)
 
charSHA384_End (SHA384_CTX *, char[SHA384_DIGEST_STRING_LENGTH])
 
charSHA384_Data (const sha2_byte *, size_t, char[SHA384_DIGEST_STRING_LENGTH])
 
void SHA512_Init (SHA512_CTX *)
 
void SHA512_Update (SHA512_CTX *, const sha2_byte *, size_t)
 
void SHA512_Final (sha2_byte[SHA512_DIGEST_LENGTH], SHA512_CTX *)
 
charSHA512_End (SHA512_CTX *, char[SHA512_DIGEST_STRING_LENGTH])
 
charSHA512_Data (const sha2_byte *, size_t, char[SHA512_DIGEST_STRING_LENGTH])
 

Macro Definition Documentation

◆ SHA256_BLOCK_LENGTH

#define SHA256_BLOCK_LENGTH   64

Definition at line 39 of file sha2.h.

◆ SHA256_DIGEST_LENGTH

#define SHA256_DIGEST_LENGTH   32

Definition at line 40 of file sha2.h.

◆ SHA256_DIGEST_STRING_LENGTH

#define SHA256_DIGEST_STRING_LENGTH   (SHA256_DIGEST_LENGTH * 2 + 1)

Definition at line 41 of file sha2.h.

◆ SHA384_BLOCK_LENGTH

#define SHA384_BLOCK_LENGTH   128

Definition at line 42 of file sha2.h.

◆ SHA384_DIGEST_LENGTH

#define SHA384_DIGEST_LENGTH   48

Definition at line 43 of file sha2.h.

◆ SHA384_DIGEST_STRING_LENGTH

#define SHA384_DIGEST_STRING_LENGTH   (SHA384_DIGEST_LENGTH * 2 + 1)

Definition at line 44 of file sha2.h.

◆ SHA512_BLOCK_LENGTH

#define SHA512_BLOCK_LENGTH   128

Definition at line 45 of file sha2.h.

◆ SHA512_DIGEST_LENGTH

#define SHA512_DIGEST_LENGTH   64

Definition at line 46 of file sha2.h.

◆ SHA512_DIGEST_STRING_LENGTH

#define SHA512_DIGEST_STRING_LENGTH   (SHA512_DIGEST_LENGTH * 2 + 1)

Definition at line 47 of file sha2.h.

Typedef Documentation

◆ SHA256_CTX

◆ sha2_byte

typedef UINT8 sha2_byte

Definition at line 51 of file sha2.h.

◆ sha2_word32

Definition at line 52 of file sha2.h.

◆ sha2_word64

Definition at line 53 of file sha2.h.

◆ SHA384_CTX

Definition at line 66 of file sha2.h.

◆ SHA512_CTX

Function Documentation

◆ SHA256_Data()

char * SHA256_Data ( const sha2_byte data,
size_t  len,
char  digest[SHA256_DIGEST_STRING_LENGTH] 
)

Definition at line 593 of file sha2.c.

593 {
595
598 return SHA256_End(&context, digest);
599}
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLenum GLsizei len
Definition: glext.h:6722
void SHA256_Init(SHA256_CTX *context)
Definition: sha2.c:275
void SHA256_Update(SHA256_CTX *context, const sha2_byte *data, size_t len)
Definition: sha2.c:459
char * SHA256_End(SHA256_CTX *context, char buffer[SHA256_DIGEST_STRING_LENGTH])
Definition: sha2.c:570
Definition: http.c:7252

◆ SHA256_End()

char * SHA256_End ( SHA256_CTX context,
char  buffer[SHA256_DIGEST_STRING_LENGTH] 
)

Definition at line 570 of file sha2.c.

570 {
571 sha2_byte digest[SHA256_DIGEST_LENGTH], *d = digest;
572 int i;
573
574 /* Sanity check: */
575 assert(context != NULL);
576
577 if (buffer != NULL) {
578 SHA256_Final(digest, context);
579
580 for (i = 0; i < SHA256_DIGEST_LENGTH; i++) {
581 *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
582 *buffer++ = sha2_hex_digits[*d & 0x0f];
583 d++;
584 }
585 *buffer = 0;
586 } else {
587 MEMSET_BZERO(context, sizeof(*context));
588 }
590 return buffer;
591}
#define NULL
Definition: types.h:112
#define assert(_expr)
Definition: assert.h:32
GLuint buffer
Definition: glext.h:5915
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define d
Definition: ke_i.h:81
void SHA256_Final(sha2_byte digest[SHA256_DIGEST_LENGTH], SHA256_CTX *context)
Definition: sha2.c:507
#define MEMSET_BZERO(p, l)
Definition: sha2.c:115
static const char sha2_hex_digits[]
Definition: sha2.c:271
UINT8 sha2_byte
Definition: sha2.h:51
#define SHA256_DIGEST_LENGTH
Definition: sha2.h:40

Referenced by SHA256_Data().

◆ SHA256_Final()

void SHA256_Final ( sha2_byte  digest[SHA256_DIGEST_LENGTH],
SHA256_CTX context 
)

Definition at line 507 of file sha2.c.

507 {
508 sha2_word32 *d = (sha2_word32*)digest;
509 unsigned int usedspace;
510
511 /* Sanity check: */
512 assert(context != NULL);
513
514 /* If no digest buffer is passed, we don't bother doing this: */
515 if (digest != NULL) {
516 usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
517#ifndef WORDS_BIGENDIAN
518 /* Convert FROM host byte order */
519 REVERSE64(context->bitcount,context->bitcount);
520#endif
521 if (usedspace > 0) {
522 /* Begin padding with a 1 bit: */
523 context->buffer[usedspace++] = 0x80;
524
525 if (usedspace <= SHA256_SHORT_BLOCK_LENGTH) {
526 /* Set-up for the last transform: */
527 MEMSET_BZERO(&context->buffer[usedspace], SHA256_SHORT_BLOCK_LENGTH - usedspace);
528 } else {
529 if (usedspace < SHA256_BLOCK_LENGTH) {
530 MEMSET_BZERO(&context->buffer[usedspace], SHA256_BLOCK_LENGTH - usedspace);
531 }
532 /* Do second-to-last transform: */
534
535 /* And set-up for the last transform: */
537 }
538 } else {
539 /* Set-up for the last transform: */
541
542 /* Begin padding with a 1 bit: */
543 *context->buffer = 0x80;
544 }
545 /* Set the bit count: */
546 *(sha2_word64*)&context->buffer[SHA256_SHORT_BLOCK_LENGTH] = context->bitcount;
547
548 /* Final transform: */
550
551#ifndef WORDS_BIGENDIAN
552 {
553 /* Convert TO host byte order */
554 int j;
555 for (j = 0; j < 8; j++) {
556 REVERSE32(context->state[j],context->state[j]);
557 *d++ = context->state[j];
558 }
559 }
560#else
562#endif
563 }
564
565 /* Clean up state data: */
566 MEMSET_BZERO(context, sizeof(*context));
567 usedspace = 0;
568}
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define REVERSE64(w, x)
Definition: sha2.c:74
#define REVERSE32(w, x)
Definition: sha2.c:69
#define MEMCPY_BCOPY(d, s, l)
Definition: sha2.c:116
#define SHA256_SHORT_BLOCK_LENGTH
Definition: sha2.c:61
void SHA256_Transform(SHA256_CTX *, const sha2_word32 *)
Definition: sha2.c:379
UINT64 sha2_word64
Definition: sha2.h:53
UINT32 sha2_word32
Definition: sha2.h:52
#define SHA256_BLOCK_LENGTH
Definition: sha2.h:39

Referenced by finalize_hash_impl(), and SHA256_End().

◆ SHA256_Init()

void SHA256_Init ( SHA256_CTX context)

Definition at line 275 of file sha2.c.

275 {
276 if (context == NULL) {
277 return;
278 }
281 context->bitcount = 0;
282}
static const sha2_word32 sha256_initial_hash_value[8]
Definition: sha2.c:188

Referenced by init_hash_impl(), and SHA256_Data().

◆ SHA256_Update()

void SHA256_Update ( SHA256_CTX context,
const sha2_byte data,
size_t  len 
)

Definition at line 459 of file sha2.c.

459 {
460 unsigned int freespace, usedspace;
461
462 if (len == 0) {
463 /* Calling with no data is valid - we do nothing */
464 return;
465 }
466
467 /* Sanity check: */
468 assert(context != NULL && data != NULL);
469
470 usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
471 if (usedspace > 0) {
472 /* Calculate how much free space is available in the buffer */
473 freespace = SHA256_BLOCK_LENGTH - usedspace;
474
475 if (len >= freespace) {
476 /* Fill the buffer completely and process it */
477 MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace);
478 context->bitcount += freespace << 3;
479 len -= freespace;
480 data += freespace;
482 } else {
483 /* The buffer is not yet full */
484 MEMCPY_BCOPY(&context->buffer[usedspace], data, len);
485 context->bitcount += len << 3;
486 /* Clean up: */
487 usedspace = freespace = 0;
488 return;
489 }
490 }
491 while (len >= SHA256_BLOCK_LENGTH) {
492 /* Process as many complete blocks as we can */
494 context->bitcount += SHA256_BLOCK_LENGTH << 3;
497 }
498 if (len > 0) {
499 /* There's left-overs, so save 'em */
500 MEMCPY_BCOPY(context->buffer, data, len);
501 context->bitcount += len << 3;
502 }
503 /* Clean up: */
504 usedspace = freespace = 0;
505}

Referenced by SHA256_Data(), and update_hash_impl().

◆ SHA384_Data()

char * SHA384_Data ( const sha2_byte data,
size_t  len,
char  digest[SHA384_DIGEST_STRING_LENGTH] 
)

Definition at line 997 of file sha2.c.

997 {
999
1002 return SHA384_End(&context, digest);
1003}
void SHA384_Init(SHA384_CTX *context)
Definition: sha2.c:932
char * SHA384_End(SHA384_CTX *context, char buffer[SHA384_DIGEST_STRING_LENGTH])
Definition: sha2.c:974
void SHA384_Update(SHA384_CTX *context, const sha2_byte *data, size_t len)
Definition: sha2.c:941

◆ SHA384_End()

char * SHA384_End ( SHA384_CTX context,
char  buffer[SHA384_DIGEST_STRING_LENGTH] 
)

Definition at line 974 of file sha2.c.

974 {
975 sha2_byte digest[SHA384_DIGEST_LENGTH], *d = digest;
976 int i;
977
978 /* Sanity check: */
979 assert(context != NULL);
980
981 if (buffer != NULL) {
982 SHA384_Final(digest, context);
983
984 for (i = 0; i < SHA384_DIGEST_LENGTH; i++) {
985 *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
986 *buffer++ = sha2_hex_digits[*d & 0x0f];
987 d++;
988 }
989 *buffer = 0;
990 } else {
991 MEMSET_BZERO(context, sizeof(*context));
992 }
994 return buffer;
995}
void SHA384_Final(sha2_byte digest[SHA384_DIGEST_LENGTH], SHA384_CTX *context)
Definition: sha2.c:945
#define SHA384_DIGEST_LENGTH
Definition: sha2.h:43

Referenced by SHA384_Data().

◆ SHA384_Final()

void SHA384_Final ( sha2_byte  digest[SHA384_DIGEST_LENGTH],
SHA384_CTX context 
)

Definition at line 945 of file sha2.c.

945 {
946 sha2_word64 *d = (sha2_word64*)digest;
947
948 /* Sanity check: */
949 assert(context != NULL);
950
951 /* If no digest buffer is passed, we don't bother doing this: */
952 if (digest != NULL) {
954
955 /* Save the hash data for output: */
956#ifndef WORDS_BIGENDIAN
957 {
958 /* Convert TO host byte order */
959 int j;
960 for (j = 0; j < 6; j++) {
961 REVERSE64(context->state[j],context->state[j]);
962 *d++ = context->state[j];
963 }
964 }
965#else
967#endif
968 }
969
970 /* Zero out state data */
971 MEMSET_BZERO(context, sizeof(*context));
972}
void SHA512_Last(SHA512_CTX *)
Definition: sha2.c:829

Referenced by finalize_hash_impl(), and SHA384_End().

◆ SHA384_Init()

void SHA384_Init ( SHA384_CTX context)

Definition at line 932 of file sha2.c.

932 {
933 if (context == NULL) {
934 return;
935 }
938 context->bitcount[0] = context->bitcount[1] = 0;
939}
static const sha2_word64 sha384_initial_hash_value[8]
Definition: sha2.c:244
#define SHA512_DIGEST_LENGTH
Definition: sha2.h:46
#define SHA384_BLOCK_LENGTH
Definition: sha2.h:42

Referenced by init_hash_impl(), and SHA384_Data().

◆ SHA384_Update()

void SHA384_Update ( SHA384_CTX context,
const sha2_byte data,
size_t  len 
)

Definition at line 941 of file sha2.c.

941 {
943}
void SHA512_Update(SHA512_CTX *context, const sha2_byte *data, size_t len)
Definition: sha2.c:781

Referenced by SHA384_Data(), and update_hash_impl().

◆ SHA512_Data()

char * SHA512_Data ( const sha2_byte data,
size_t  len,
char  digest[SHA512_DIGEST_STRING_LENGTH] 
)

Definition at line 922 of file sha2.c.

922 {
924
927 return SHA512_End(&context, digest);
928}
char * SHA512_End(SHA512_CTX *context, char buffer[SHA512_DIGEST_STRING_LENGTH])
Definition: sha2.c:899
void SHA512_Init(SHA512_CTX *context)
Definition: sha2.c:603

◆ SHA512_End()

char * SHA512_End ( SHA512_CTX context,
char  buffer[SHA512_DIGEST_STRING_LENGTH] 
)

Definition at line 899 of file sha2.c.

899 {
900 sha2_byte digest[SHA512_DIGEST_LENGTH], *d = digest;
901 int i;
902
903 /* Sanity check: */
904 assert(context != NULL);
905
906 if (buffer != NULL) {
907 SHA512_Final(digest, context);
908
909 for (i = 0; i < SHA512_DIGEST_LENGTH; i++) {
910 *buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
911 *buffer++ = sha2_hex_digits[*d & 0x0f];
912 d++;
913 }
914 *buffer = 0;
915 } else {
916 MEMSET_BZERO(context, sizeof(*context));
917 }
919 return buffer;
920}
void SHA512_Final(sha2_byte digest[SHA512_DIGEST_LENGTH], SHA512_CTX *context)
Definition: sha2.c:870

Referenced by SHA512_Data().

◆ SHA512_Final()

void SHA512_Final ( sha2_byte  digest[SHA512_DIGEST_LENGTH],
SHA512_CTX context 
)

Definition at line 870 of file sha2.c.

870 {
871 sha2_word64 *d = (sha2_word64*)digest;
872
873 /* Sanity check: */
874 assert(context != NULL);
875
876 /* If no digest buffer is passed, we don't bother doing this: */
877 if (digest != NULL) {
879
880 /* Save the hash data for output: */
881#ifndef WORDS_BIGENDIAN
882 {
883 /* Convert TO host byte order */
884 int j;
885 for (j = 0; j < 8; j++) {
886 REVERSE64(context->state[j],context->state[j]);
887 *d++ = context->state[j];
888 }
889 }
890#else
892#endif
893 }
894
895 /* Zero out state data */
896 MEMSET_BZERO(context, sizeof(*context));
897}

Referenced by finalize_hash_impl(), and SHA512_End().

◆ SHA512_Init()

void SHA512_Init ( SHA512_CTX context)

Definition at line 603 of file sha2.c.

603 {
604 if (context == NULL) {
605 return;
606 }
609 context->bitcount[0] = context->bitcount[1] = 0;
610}
static const sha2_word64 sha512_initial_hash_value[8]
Definition: sha2.c:256
#define SHA512_BLOCK_LENGTH
Definition: sha2.h:45

Referenced by init_hash_impl(), and SHA512_Data().

◆ SHA512_Update()

void SHA512_Update ( SHA512_CTX context,
const sha2_byte data,
size_t  len 
)

Definition at line 781 of file sha2.c.

781 {
782 unsigned int freespace, usedspace;
783
784 if (len == 0) {
785 /* Calling with no data is valid - we do nothing */
786 return;
787 }
788
789 /* Sanity check: */
790 assert(context != NULL && data != NULL);
791
792 usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
793 if (usedspace > 0) {
794 /* Calculate how much free space is available in the buffer */
795 freespace = SHA512_BLOCK_LENGTH - usedspace;
796
797 if (len >= freespace) {
798 /* Fill the buffer completely and process it */
799 MEMCPY_BCOPY(&context->buffer[usedspace], data, freespace);
800 ADDINC128(context->bitcount, freespace << 3);
801 len -= freespace;
802 data += freespace;
804 } else {
805 /* The buffer is not yet full */
806 MEMCPY_BCOPY(&context->buffer[usedspace], data, len);
807 ADDINC128(context->bitcount, len << 3);
808 /* Clean up: */
809 usedspace = freespace = 0;
810 return;
811 }
812 }
813 while (len >= SHA512_BLOCK_LENGTH) {
814 /* Process as many complete blocks as we can */
816 ADDINC128(context->bitcount, SHA512_BLOCK_LENGTH << 3);
819 }
820 if (len > 0) {
821 /* There's left-overs, so save 'em */
822 MEMCPY_BCOPY(context->buffer, data, len);
823 ADDINC128(context->bitcount, len << 3);
824 }
825 /* Clean up: */
826 usedspace = freespace = 0;
827}
#define ADDINC128(w, n)
Definition: sha2.c:89
void SHA512_Transform(SHA512_CTX *, const sha2_word64 *)
Definition: sha2.c:703

Referenced by SHA384_Update(), SHA512_Data(), and update_hash_impl().