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
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta name="robots" content="noindex">
<title>sapphire.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.1.5 on Thu May 24 19:50:25 2001 -->
<center>
<a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center>
<hr><h1>sapphire.h</h1><div class="fragment"><pre>00001 <font class="comment">/* sapphire.h -- Interface for the Saphire II stream cipher.
</font>00002 <font class="comment">
</font>00003 <font class="comment"> Dedicated to the Public Domain the author and inventor
</font>00004 <font class="comment"> (Michael Paul Johnson). This code comes with no warranty.
</font>00005 <font class="comment"> Use it at your own risk.
</font>00006 <font class="comment"> Ported from the Pascal implementation of the Sapphire Stream
</font>00007 <font class="comment"> Cipher 9 December 1994.
</font>00008 <font class="comment"> Added hash-specific functions 27 December 1994.
</font>00009 <font class="comment"> Made index variable initialization key-dependent,
</font>00010 <font class="comment"> made the output function more resistant to cryptanalysis,
</font>00011 <font class="comment"> and renamed to Sapphire II Stream Cipher 2 January 1995.
</font>00012 <font class="comment">
</font>00013 <font class="comment"> unsigned char is assumed to be 8 bits. If it is not, the
</font>00014 <font class="comment"> results of assignments need to be reduced to 8 bits with
</font>00015 <font class="comment"> & 0xFF or % 0x100, whichever is faster.
</font>00016 <font class="comment">*/</font>
00017
00018 <font class="preprocessor">#ifndef NULL
</font>00019 <font class="preprocessor"></font><font class="preprocessor">#define NULL 0
</font>00020 <font class="preprocessor"></font><font class="preprocessor">#endif </font><font class="comment">/* */</font>
00021 <font class="keyword">class </font>sapphire
00022 {
00023
00024 <font class="comment">// These variables comprise the state of the state machine.</font>
00025 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> cards[256]; <font class="comment">// A permutation of 0-255.</font>
00026 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> rotor, <font class="comment">// Index that rotates smoothly</font>
00027 ratchet, <font class="comment">// Index that moves erratically</font>
00028 avalanche, <font class="comment">// Index heavily data dependent</font>
00029 last_plain, <font class="comment">// Last plain text byte</font>
00030 last_cipher; <font class="comment">// Last cipher text byte</font>
00031
00032 <font class="comment">// This function is used by initialize(), which is called by the</font>
00033 <font class="comment">// constructor.</font>
00034 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> keyrand (<font class="keywordtype">int</font> limit, <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> *user_key,
00035 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> keysize, <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> *rsum,
00036 <font class="keywordtype">unsigned</font> *keypos); <font class="keyword">public</font>:sapphire (<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font>
00037 *key = NULL, <font class="comment">// Calls initialize if a real</font>
00038 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> keysize = 0); <font class="comment">// key is provided. If none</font>
00039 <font class="comment">// is provided, call initialize</font>
00040 <font class="comment">// before encrypt or decrypt.</font>
00041 ~sapphire (); <font class="comment">// Destroy cipher state information.</font>
00042 <font class="keywordtype">void</font> initialize (<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> *key, <font class="comment">// User key is used to set</font>
00043 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> keysize); <font class="comment">// up state information.</font>
00044 <font class="keywordtype">void</font> hash_init (<font class="keywordtype">void</font>); <font class="comment">// Set up default hash.</font>
00045 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> encrypt (<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> b = 0); <font class="comment">// Encrypt byte</font>
00046 <font class="comment">// or get a random byte.</font>
00047 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> decrypt (<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> b); <font class="comment">// Decrypt byte.</font>
00048 <font class="keywordtype">void</font> hash_final (<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> *hash, <font class="comment">// Copy hash value to hash</font>
00049 <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> hashlength = 20); <font class="comment">// Hash length (16-32)</font>
00050 <font class="keywordtype">void</font> burn (<font class="keywordtype">void</font>); <font class="comment">// Destroy cipher state information.</font>
00051 };
00052
00053
</div></pre><hr><address><small>Generated at Thu May 24 19:50:25 2001 for The Sword Project by
<a href="http://www.stack.nl/~dimitri/doxygen/index.html">
<img src="doxygen.gif" alt="doxygen" align=center border=0
width=110 height=53></a>1.1.5 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
© 1997-2000</small></address>
</body>
</html>
|