1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--Converted with LaTeX2HTML 2008 (1.71)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Adding Hash Algorithms</TITLE>
<META NAME="description" CONTENT="Adding Hash Algorithms">
<META NAME="keywords" CONTENT="pycrypt">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2008">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="pycrypt.css">
<LINK REL="next" HREF="node24.html">
<LINK REL="previous" HREF="node22.html">
<LINK REL="up" HREF="node22.html">
<LINK REL="next" HREF="node24.html">
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html337"
HREF="node24.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html333"
HREF="node22.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html327"
HREF="node22.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html335"
HREF="node1.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html338"
HREF="node24.html">Adding Block Encryption Algorithms</A>
<B> Up:</B> <A NAME="tex2html334"
HREF="node22.html">Extending the Toolkit</A>
<B> Previous:</B> <A NAME="tex2html328"
HREF="node22.html">Extending the Toolkit</A>
<B> <A NAME="tex2html336"
HREF="node1.html">Contents</A></B>
<BR>
<BR></DIV>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00081000000000000000">
Adding Hash Algorithms</A>
</H2>
<P>
The required constant definitions are as follows:
<P>
<PRE>
#define MODULE_NAME MD2 /* Name of algorithm */
#define DIGEST_SIZE 16 /* Size of resulting digest in bytes */
</PRE>
<P>
The C structure must be named hash_state:
<P>
<PRE>
typedef struct {
... whatever state variables you need ...
} hash_state;
</PRE>
<P>
There are four functions that need to be written: to initialize the
algorithm's state, to hash a string into the algorithm's state, to get
a digest from the current state, and to copy a state.
<P>
<UL>
<LI>void hash_init(hash_state *self);
</LI>
<LI>void hash_update(hash_state *self, unsigned char *buffer, int length);
</LI>
<LI>PyObject *hash_digest(hash_state *self);
</LI>
<LI>void hash_copy(hash_state *source, hash_state *dest);
</LI>
</UL>
<P>
Put #include "hash_template.c" at the end of the file to
include the actual implementation of the module.
<P>
<BR><HR>
</BODY>
</HTML>
|