Header And Logo

PostgreSQL
| The world's most advanced open source database.

Data Structures | Defines | Typedefs | Functions

sha1.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  sha1_ctxt

Defines

#define SHA1Init(x)   sha1_init((x))
#define SHA1Update(x, y, z)   sha1_loop((x), (y), (z))
#define SHA1Final(x, y)   sha1_result((y), (x))
#define SHA1_RESULTLEN   (160/8)

Typedefs

typedef struct sha1_ctxt SHA1_CTX

Functions

void sha1_init (struct sha1_ctxt *)
void sha1_pad (struct sha1_ctxt *)
void sha1_loop (struct sha1_ctxt *, const uint8 *, size_t)
void sha1_result (struct sha1_ctxt *, uint8 *)

Define Documentation

#define SHA1_RESULTLEN   (160/8)

Definition at line 73 of file sha1.h.

#define SHA1Final (   x,
  y 
)    sha1_result((y), (x))

Definition at line 71 of file sha1.h.

Referenced by int_sha1_finish().

#define SHA1Init (   x  )     sha1_init((x))

Definition at line 69 of file sha1.h.

Referenced by int_sha1_reset().

#define SHA1Update (   x,
  y,
  z 
)    sha1_loop((x), (y), (z))

Definition at line 70 of file sha1.h.

Referenced by int_sha1_update().


Typedef Documentation

typedef struct sha1_ctxt SHA1_CTX

Definition at line 67 of file sha1.h.


Function Documentation

void sha1_init ( struct sha1_ctxt  ) 

Definition at line 229 of file sha1.c.

References H.

{
    memset(ctxt, 0, sizeof(struct sha1_ctxt));
    H(0) = 0x67452301;
    H(1) = 0xefcdab89;
    H(2) = 0x98badcfe;
    H(3) = 0x10325476;
    H(4) = 0xc3d2e1f0;
}

void sha1_loop ( struct sha1_ctxt ,
const uint8 ,
size_t   
)

Definition at line 283 of file sha1.c.

References sha1_ctxt::b64, sha1_ctxt::b8, sha1_ctxt::c, COUNT, sha1_ctxt::m, memmove, and sha1_step().

{
    const uint8 *input;
    size_t      gaplen;
    size_t      gapstart;
    size_t      off;
    size_t      copysiz;

    input = (const uint8 *) input0;
    off = 0;

    while (off < len)
    {
        gapstart = COUNT % 64;
        gaplen = 64 - gapstart;

        copysiz = (gaplen < len - off) ? gaplen : len - off;
        memmove(&ctxt->m.b8[gapstart], &input[off], copysiz);
        COUNT += copysiz;
        COUNT %= 64;
        ctxt->c.b64[0] += copysiz * 8;
        if (COUNT % 64 == 0)
            sha1_step(ctxt);
        off += copysiz;
    }
}

void sha1_pad ( struct sha1_ctxt  ) 

Definition at line 240 of file sha1.c.

References sha1_ctxt::b8, sha1_ctxt::c, COUNT, sha1_ctxt::m, PUTPAD, and sha1_step().

Referenced by sha1_result().

{
    size_t      padlen;         /* pad length in bytes */
    size_t      padstart;

    PUTPAD(0x80);

    padstart = COUNT % 64;
    padlen = 64 - padstart;
    if (padlen < 8)
    {
        memset(&ctxt->m.b8[padstart], 0, padlen);
        COUNT += padlen;
        COUNT %= 64;
        sha1_step(ctxt);
        padstart = COUNT % 64;  /* should be 0 */
        padlen = 64 - padstart; /* should be 64 */
    }
    memset(&ctxt->m.b8[padstart], 0, padlen - 8);
    COUNT += (padlen - 8);
    COUNT %= 64;
#ifdef WORDS_BIGENDIAN
    PUTPAD(ctxt->c.b8[0]);
    PUTPAD(ctxt->c.b8[1]);
    PUTPAD(ctxt->c.b8[2]);
    PUTPAD(ctxt->c.b8[3]);
    PUTPAD(ctxt->c.b8[4]);
    PUTPAD(ctxt->c.b8[5]);
    PUTPAD(ctxt->c.b8[6]);
    PUTPAD(ctxt->c.b8[7]);
#else
    PUTPAD(ctxt->c.b8[7]);
    PUTPAD(ctxt->c.b8[6]);
    PUTPAD(ctxt->c.b8[5]);
    PUTPAD(ctxt->c.b8[4]);
    PUTPAD(ctxt->c.b8[3]);
    PUTPAD(ctxt->c.b8[2]);
    PUTPAD(ctxt->c.b8[1]);
    PUTPAD(ctxt->c.b8[0]);
#endif
}

void sha1_result ( struct sha1_ctxt ,
uint8  
)

Definition at line 311 of file sha1.c.

References sha1_ctxt::b8, sha1_ctxt::h, memmove, and sha1_pad().

{
    uint8      *digest;

    digest = (uint8 *) digest0;
    sha1_pad(ctxt);
#ifdef WORDS_BIGENDIAN
    memmove(digest, &ctxt->h.b8[0], 20);
#else
    digest[0] = ctxt->h.b8[3];
    digest[1] = ctxt->h.b8[2];
    digest[2] = ctxt->h.b8[1];
    digest[3] = ctxt->h.b8[0];
    digest[4] = ctxt->h.b8[7];
    digest[5] = ctxt->h.b8[6];
    digest[6] = ctxt->h.b8[5];
    digest[7] = ctxt->h.b8[4];
    digest[8] = ctxt->h.b8[11];
    digest[9] = ctxt->h.b8[10];
    digest[10] = ctxt->h.b8[9];
    digest[11] = ctxt->h.b8[8];
    digest[12] = ctxt->h.b8[15];
    digest[13] = ctxt->h.b8[14];
    digest[14] = ctxt->h.b8[13];
    digest[15] = ctxt->h.b8[12];
    digest[16] = ctxt->h.b8[19];
    digest[17] = ctxt->h.b8[18];
    digest[18] = ctxt->h.b8[17];
    digest[19] = ctxt->h.b8[16];
#endif
}