Annotation of OpenXM/src/ox_ntl/crypt/sha1/ntlsha.cpp, Revision 1.2
1.2 ! iwane 1: /* $OpenXM: OpenXM/src/ox_ntl/crypt/sha1/ntlsha.cpp,v 1.1 2004/01/12 13:16:28 iwane Exp $ */
! 2: /* RFC 3174 -- see sha1.c */
1.1 iwane 3:
4: #include <NTL/ZZ.h>
5:
6: #include <stdlib.h>
7:
8: #include "sha1.h"
9:
10: int
11: ntl_sha1_h(ZZ &sha, const ZZ &m, unsigned int *t)
12: {
13: unsigned char h[20]; // 160 bit
14: unsigned char *msg, msg_buf[1024];
15: unsigned int msglen = sizeof(msg);
16: unsigned int i;
17: unsigned char uch;
18: int ret;
19:
20: msglen = NumBytes(m);
21: if (msglen <= sizeof(msg)) {
22: msg = msg_buf;
23: } else {
24: msg = new unsigned char[msglen];
25: }
26:
27: BytesFromZZ(msg, m, msglen);
28:
29: for (i = 0; i < msglen / 2; i++) {
30: uch = msg[i];
31: msg[i] = msg[msglen - i - 1];
32: msg[msglen - i - 1] = uch;
33: }
34:
35: if (t == NULL) {
36: ret = sha1(h, msg, msglen);
37: } else {
38: ret = sha1_h(h, msg, msglen, t);
39:
40: }
41:
42: if (msg != msg_buf)
43: delete [] msg;
44:
45: for (i = 0; i < sizeof(h) / 2; i++) {
46: uch = h[i];
47: h[i] = h[sizeof(h) - i - 1];
48: h[sizeof(h) - i - 1] = uch;
49: }
50:
51: ZZFromBytes(sha, h, sizeof(h));
52:
53: return (ret);
54: }
55:
56: int
57: ntl_sha1(ZZ &sha, const ZZ &m)
58: {
59: return (ntl_sha1_h(sha, m, NULL));
60: }
61:
62:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>