annotate mcabber/libjabber/sha.c @ 1461:8fa24a6d1a93

Improve Remote Controlling Clients The XEP recommends adding the node to the IQ response. Some clients seem not to understand the answer when it is omitted. Problem reported by Rhaamo and js (thanks to js for spotting the node issue!).
author Mikael Berthe <mikael@lilotux.net>
date Sat, 12 Apr 2008 13:35:03 +0200
parents ec86d759ed54
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
414
ec86d759ed54 Trailing whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
1 /*
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
2 * The contents of this file are subject to the Mozilla Public
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
3 * License Version 1.1 (the "License"); you may not use this file
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
4 * except in compliance with the License. You may obtain a copy of
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
5 * the License at http://www.mozilla.org/MPL/
414
ec86d759ed54 Trailing whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
6 *
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
7 * Software distributed under the License is distributed on an "AS
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
9 * implied. See the License for the specific language governing
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
10 * rights and limitations under the License.
414
ec86d759ed54 Trailing whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
11 *
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
12 * The Original Code is SHA 180-1 Reference Implementation (Compact version)
414
ec86d759ed54 Trailing whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
13 *
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
14 * The Initial Developer of the Original Code is Paul Kocher of
414
ec86d759ed54 Trailing whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
15 * Cryptography Research. Portions created by Paul Kocher are
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
16 * Copyright (C) 1995-9 by Cryptography Research, Inc. All
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
17 * Rights Reserved.
414
ec86d759ed54 Trailing whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
18 *
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
19 * Contributor(s):
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
20 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
21 * Paul Kocher
414
ec86d759ed54 Trailing whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
22 *
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
23 * Alternatively, the contents of this file may be used under the
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
24 * terms of the GNU General Public License Version 2 or later (the
414
ec86d759ed54 Trailing whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
25 * "GPL"), in which case the provisions of the GPL are applicable
ec86d759ed54 Trailing whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
26 * instead of those above. If you wish to allow use of your
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
27 * version of this file only under the terms of the GPL and not to
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
28 * allow others to use your version of this file under the MPL,
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
29 * indicate your decision by deleting the provisions above and
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
30 * replace them with the notice and other provisions required by
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
31 * the GPL. If you do not delete the provisions above, a recipient
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
32 * may use your version of this file under either the MPL or the
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
33 * GPL.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
34 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
35
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
36 #include "libxode.h"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
37
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
38 static void shaHashBlock(SHA_CTX *ctx);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
39
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
40 void shaInit(SHA_CTX *ctx) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
41 int i;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
42
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
43 ctx->lenW = 0;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
44 ctx->sizeHi = ctx->sizeLo = 0;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
45
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
46 /* Initialize H with the magic constants (see FIPS180 for constants)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
47 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
48 ctx->H[0] = 0x67452301L;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
49 ctx->H[1] = 0xefcdab89L;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
50 ctx->H[2] = 0x98badcfeL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
51 ctx->H[3] = 0x10325476L;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
52 ctx->H[4] = 0xc3d2e1f0L;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
53
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
54 for (i = 0; i < 80; i++)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
55 ctx->W[i] = 0;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
56 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
57
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
58
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
59 void shaUpdate(SHA_CTX *ctx, unsigned char *dataIn, int len) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
60 int i;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
61
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
62 /* Read the data into W and process blocks as they get full
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
63 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
64 for (i = 0; i < len; i++) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
65 ctx->W[ctx->lenW / 4] <<= 8;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
66 ctx->W[ctx->lenW / 4] |= (uint32_t)dataIn[i];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
67 if ((++ctx->lenW) % 64 == 0) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
68 shaHashBlock(ctx);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
69 ctx->lenW = 0;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
70 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
71 ctx->sizeLo += 8;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
72 ctx->sizeHi += (ctx->sizeLo < 8);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
73 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
74 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
75
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
76
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
77 void shaFinal(SHA_CTX *ctx, unsigned char hashout[20]) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
78 unsigned char pad0x80 = 0x80;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
79 unsigned char pad0x00 = 0x00;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
80 unsigned char padlen[8];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
81 int i;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
82
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
83 /* Pad with a binary 1 (e.g. 0x80), then zeroes, then length
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
84 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
85 padlen[0] = (unsigned char)((ctx->sizeHi >> 24) & 255);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
86 padlen[1] = (unsigned char)((ctx->sizeHi >> 16) & 255);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
87 padlen[2] = (unsigned char)((ctx->sizeHi >> 8) & 255);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
88 padlen[3] = (unsigned char)((ctx->sizeHi >> 0) & 255);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
89 padlen[4] = (unsigned char)((ctx->sizeLo >> 24) & 255);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
90 padlen[5] = (unsigned char)((ctx->sizeLo >> 16) & 255);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
91 padlen[6] = (unsigned char)((ctx->sizeLo >> 8) & 255);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
92 padlen[7] = (unsigned char)((ctx->sizeLo >> 0) & 255);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
93 shaUpdate(ctx, &pad0x80, 1);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
94 while (ctx->lenW != 56)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
95 shaUpdate(ctx, &pad0x00, 1);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
96 shaUpdate(ctx, padlen, 8);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
97
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
98 /* Output hash
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
99 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
100 for (i = 0; i < 20; i++) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
101 hashout[i] = (unsigned char)(ctx->H[i / 4] >> 24);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
102 ctx->H[i / 4] <<= 8;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
103 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
104
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
105 /*
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
106 * Re-initialize the context (also zeroizes contents)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
107 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
108 shaInit(ctx);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
109 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
110
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
111
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
112 void shaBlock(unsigned char *dataIn, int len, unsigned char hashout[20]) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
113 SHA_CTX ctx;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
114
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
115 shaInit(&ctx);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
116 shaUpdate(&ctx, dataIn, len);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
117 shaFinal(&ctx, hashout);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
118 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
119
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
120
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
121 #define SHA_ROTL(X,n) (((X) << (n)) | ((X) >> (32-(n))))
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
122
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
123 static void shaHashBlock(SHA_CTX *ctx) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
124 int t;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
125 uint32_t A,B,C,D,E,TEMP;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
126
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
127 for (t = 16; t <= 79; t++)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
128 ctx->W[t] =
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
129 SHA_ROTL(ctx->W[t-3] ^ ctx->W[t-8] ^ ctx->W[t-14] ^ ctx->W[t-16], 1);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
130
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
131 A = ctx->H[0];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
132 B = ctx->H[1];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
133 C = ctx->H[2];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
134 D = ctx->H[3];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
135 E = ctx->H[4];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
136
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
137 for (t = 0; t <= 19; t++) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
138 TEMP = SHA_ROTL(A,5) + (((C^D)&B)^D) + E + ctx->W[t] + 0x5a827999L;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
139 E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
140 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
141 for (t = 20; t <= 39; t++) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
142 TEMP = SHA_ROTL(A,5) + (B^C^D) + E + ctx->W[t] + 0x6ed9eba1L;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
143 E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
144 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
145 for (t = 40; t <= 59; t++) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
146 TEMP = SHA_ROTL(A,5) + ((B&C)|(D&(B|C))) + E + ctx->W[t] + 0x8f1bbcdcL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
147 E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
148 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
149 for (t = 60; t <= 79; t++) {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
150 TEMP = SHA_ROTL(A,5) + (B^C^D) + E + ctx->W[t] + 0xca62c1d6L;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
151 E = D; D = C; C = SHA_ROTL(B, 30); B = A; A = TEMP;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
152 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
153
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
154 ctx->H[0] += A;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
155 ctx->H[1] += B;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
156 ctx->H[2] += C;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
157 ctx->H[3] += D;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
158 ctx->H[4] += E;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
159 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
160
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
161 /*----------------------------------------------------------------------------
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
162 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
163 * This code added by Thomas "temas" Muldowney for Jabber compatability
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
164 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
165 *---------------------------------------------------------------------------*/
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
166 char *shahash(char *str)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
167 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
168 static char final[41];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
169 char *pos;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
170 unsigned char hashval[20];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
171 int x;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
172
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
173 if(!str || strlen(str) == 0)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
174 return NULL;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
175
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
176 shaBlock((unsigned char *)str, strlen(str), hashval);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
177
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
178 pos = final;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
179 for(x=0;x<20;x++)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
180 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
181 snprintf(pos, 3, "%02x", hashval[x]);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
182 pos += 2;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
183 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
184 return (char *)final;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
185 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
186
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
187 void shahash_r(const char* str, char hashbuf[41])
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
188 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
189 int x;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
190 char *pos;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
191 unsigned char hashval[20];
414
ec86d759ed54 Trailing whitespace cleanup
Mikael Berthe <mikael@lilotux.net>
parents: 25
diff changeset
192
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
193 if(!str || strlen(str) == 0)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
194 return;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
195
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
196 shaBlock((unsigned char *)str, strlen(str), hashval);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
197
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
198 pos = hashbuf;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
199 for(x=0;x<20;x++)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
200 {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
201 snprintf(pos, 3, "%02x", hashval[x]);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
202 pos += 2;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
203 }
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
204
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
205 return;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
206 }