Jabber WindowGram Client (JWGC)

Introduction Screenshots Installation Downloads
Documentation Browse Source Resources Project Site

Stable Version
-none-

Latest Version
beta5



Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

JSha.c File Reference

#include "libjwgc.h"
#include "libxode.h"

Go to the source code of this file.

Defines

#define SHA_ROTL(X, n)   ((((X) << (n)) | ((X) >> (32-(n)))) & 0xffffffffL)

Functions

void j_shaInit (j_SHA_CTX *ctx)
void j_shaUpdate (j_SHA_CTX *ctx, unsigned char *dataIn, int len)
void j_shaFinal (j_SHA_CTX *ctx, unsigned char hashout[20])
void j_shaBlock (unsigned char *dataIn, int len, unsigned char hashout[20])
char * j_shahash (char *str)
void j_shahash_r (const char *str, char hashbuf[41])


Define Documentation

#define SHA_ROTL X,
 )     ((((X) << (n)) | ((X) >> (32-(n)))) & 0xffffffffL)
 

Definition at line 120 of file JSha.c.


Function Documentation

void j_shaBlock unsigned char *  dataIn,
int  len,
unsigned char  hashout[20]
 

Definition at line 110 of file JSha.c.

References j_shaFinal(), j_shaInit(), and j_shaUpdate().

Referenced by j_shahash(), and j_shahash_r().

00111 {
00112         j_SHA_CTX ctx;
00113 
00114         j_shaInit(&ctx);
00115         j_shaUpdate(&ctx, dataIn, len);
00116         j_shaFinal(&ctx, hashout);
00117 }

void j_shaFinal j_SHA_CTX ctx,
unsigned char  hashout[20]
 

Definition at line 71 of file JSha.c.

References j_SHA_CTX::H, j_shaInit(), j_shaUpdate(), j_SHA_CTX::lenW, j_SHA_CTX::sizeHi, and j_SHA_CTX::sizeLo.

Referenced by j_shaBlock().

00072 {
00073         unsigned char pad0x80 = 0x80;
00074         unsigned char pad0x00 = 0x00;
00075         unsigned char padlen[8];
00076         int i;
00077 
00078         /*
00079          * Pad with a binary 1 (e.g. 0x80), then zeroes, then length
00080          */
00081         padlen[0] = (unsigned char) ((ctx->sizeHi >> 24) & 255);
00082         padlen[1] = (unsigned char) ((ctx->sizeHi >> 16) & 255);
00083         padlen[2] = (unsigned char) ((ctx->sizeHi >> 8) & 255);
00084         padlen[3] = (unsigned char) ((ctx->sizeHi >> 0) & 255);
00085         padlen[4] = (unsigned char) ((ctx->sizeLo >> 24) & 255);
00086         padlen[5] = (unsigned char) ((ctx->sizeLo >> 16) & 255);
00087         padlen[6] = (unsigned char) ((ctx->sizeLo >> 8) & 255);
00088         padlen[7] = (unsigned char) ((ctx->sizeLo >> 0) & 255);
00089         j_shaUpdate(ctx, &pad0x80, 1);
00090         while (ctx->lenW != 56)
00091                 j_shaUpdate(ctx, &pad0x00, 1);
00092         j_shaUpdate(ctx, padlen, 8);
00093 
00094         /*
00095          * Output hash
00096          */
00097         for (i = 0; i < 20; i++) {
00098                 hashout[i] = (unsigned char) (ctx->H[i / 4] >> 24);
00099                 ctx->H[i / 4] <<= 8;
00100         }
00101 
00102         /*
00103          *  Re-initialize the context (also zeroizes contents)
00104          */
00105         j_shaInit(ctx);
00106 }

char* j_shahash char *  str  ) 
 

Definition at line 184 of file JSha.c.

References j_shaBlock(), and snprintf.

Referenced by jab_auth(), and jabutil_regkey().

00185 {
00186         static char final[41];
00187         char *pos;
00188         unsigned char hashval[20];
00189         int x;
00190 
00191         if (!str || strlen(str) == 0)
00192                 return NULL;
00193 
00194         j_shaBlock((unsigned char *) str, strlen(str), hashval);
00195 
00196         pos = final;
00197         for (x = 0; x < 20; x++) {
00198                 snprintf(pos, 3, "%02x", hashval[x]);
00199                 pos += 2;
00200         }
00201         return (char *) final;
00202 }

void j_shahash_r const char *  str,
char  hashbuf[41]
 

Definition at line 205 of file JSha.c.

References j_shaBlock(), and snprintf.

00206 {
00207         int x;
00208         char *pos;
00209         unsigned char hashval[20];
00210 
00211         if (!str || strlen(str) == 0)
00212                 return;
00213 
00214         j_shaBlock((unsigned char *) str, strlen(str), hashval);
00215 
00216         pos = hashbuf;
00217         for (x = 0; x < 20; x++) {
00218                 snprintf(pos, 3, "%02x", hashval[x]);
00219                 pos += 2;
00220         }
00221 
00222         return;
00223 }

void j_shaInit j_SHA_CTX ctx  ) 
 

Definition at line 28 of file JSha.c.

References j_SHA_CTX::H, j_SHA_CTX::lenW, j_SHA_CTX::sizeHi, j_SHA_CTX::sizeLo, and j_SHA_CTX::W.

Referenced by j_shaBlock(), and j_shaFinal().

00029 {
00030         int i;
00031 
00032         ctx->lenW = 0;
00033         ctx->sizeHi = ctx->sizeLo = 0;
00034 
00035         /*
00036          * Initialize H with the magic constants (see FIPS180 for constants)
00037          */
00038         ctx->H[0] = 0x67452301L;
00039         ctx->H[1] = 0xefcdab89L;
00040         ctx->H[2] = 0x98badcfeL;
00041         ctx->H[3] = 0x10325476L;
00042         ctx->H[4] = 0xc3d2e1f0L;
00043 
00044         for (i = 0; i < 80; i++)
00045                 ctx->W[i] = 0;
00046 }

void j_shaUpdate j_SHA_CTX ctx,
unsigned char *  dataIn,
int  len
 

Definition at line 50 of file JSha.c.

References j_SHA_CTX::lenW, j_SHA_CTX::sizeHi, j_SHA_CTX::sizeLo, and j_SHA_CTX::W.

Referenced by j_shaBlock(), and j_shaFinal().

00051 {
00052         int i;
00053 
00054         /*
00055          * Read the data into W and process blocks as they get full
00056          */
00057         for (i = 0; i < len; i++) {
00058                 ctx->W[ctx->lenW / 4] <<= 8;
00059                 ctx->W[ctx->lenW / 4] |= (unsigned long) dataIn[i];
00060                 if ((++ctx->lenW) % 64 == 0) {
00061                         j_shaHashBlock(ctx);
00062                         ctx->lenW = 0;
00063                 }
00064                 ctx->sizeLo += 8;
00065                 ctx->sizeHi += (ctx->sizeLo < 8);
00066         }
00067 }



Last updated at Tue Dec 18 21:07:42 PST 2007. This site and project hosted by...SourceForge.net Logo

Source Perspective by Fisheye