1
0
mirror of https://github.com/StephenGenusa/DCPCrypt.git synced 2025-06-02 21:57:23 +02:00
DCPCrypt/Docs/BlockCiphers.html
Stephen Genusa 5fc435d45f Initial Commit with XE7 Package Files added
DCPCrypt by David Barton updated and tested with Delphi 2009, 2010, XE,
XE2, XE3, XE4, XE5 by Warren Postma. Updated for XE7 by Stephen Genusa.
2015-03-08 18:30:34 -05:00

85 lines
7.0 KiB
HTML

<html>
<head>
<title>DCPcrypt v2: Users Guide - Block Ciphers</title>
</head>
<body>
<p align="center"><font size="+2"><b>DCPcrypt Cryptographic Component Library v2</b></font><br>
<font size="+1">Copyright &copy; 1999-2002 David Barton<br>
<a href="http://www.cityinthesky.co.uk/">http://www.cityinthesky.co.uk/</a><br>
<a href="mailto:crypto@cityinthesky.co.uk">crypto@cityinthesky.co.uk</a></font>
<p><font size="+2">Block Ciphers - TDCP_blockcipher</font>
<p>All block ciphers are inherited from the TDCP_blockcipher component via either the TDCP_blockcipher64 and TDCP_blockcipher128 components (the latter implement the block size specific code).
<p>The TDCP_blockcipher component extends the TDCP_cipher component to provide chaining mode functions. Functions available are:
<pre>
property <a href="Ciphers.html#Initialized">Initialized</a>: boolean;
property <a href="Ciphers.html#Id">Id</a>: integer;
property <a href="Ciphers.html#Algorithm">Algorithm</a>: string;
property <a href="Ciphers.html#MaxKeySize">MaxKeySize</a>: integer;
property <a href="#BlockSize">BlockSize</a>: integer;
property <a href="#CipherMode">CipherMode</a>: TDCP_ciphermode;
class function <a href="Ciphers.html#SelfTest">SelfTest</a>: boolean;
procedure <a href="#SetIV">SetIV</a>(const Value);
procedure <a href="#GetIV">GetIV</a>(var Value);
procedure <a href="Ciphers.html#Init">Init</a>(const Key; Size: longword; InitVector: pointer);
procedure <a href="Ciphers.html#InitStr">InitStr</a>(const Key: string; HashType: TDCP_hashclass);
procedure <a href="Ciphers.html#Burn">Burn</a>;
procedure <a href="Ciphers.html#Reset">Reset</a>;
procedure <a href="Ciphers.html#Encrypt">Encrypt</a>(const Indata; var Outdata; Size: longword);
procedure <a href="Ciphers.html#Decrypt">Decrypt</a>(const Indata; var Outdata; Size: longword);
function <a href="Ciphers.html#EncryptStream">EncryptStream</a>(InStream, OutStream: TStream; Size: longword): longword;
function <a href="Ciphers.html#DecryptStream">DecryptStream</a>(InStream, OutStream: TStream; Size: longword): longword;
function <a href="Ciphers.html#EncryptString">EncryptString</a>(const Str: string): string;
function <a href="Ciphers.html#DecryptString">DecryptString</a>(const Str: string): string;
procedure <a href="#EncryptECB">EncryptECB</a>(const Indata; var Outdata);
procedure <a href="#DecryptECB">DecryptECB</a>(const Indata; var Outdata);
procedure <a href="#EncryptCBC">EncryptCBC</a>(const Indata; var Outdata; Size: longword);
procedure <a href="#DecryptCBC">DecryptCBC</a>(const Indata; var Outdata; Size: longword);
procedure <a href="#EncryptCFB8bit">EncryptCFB8bit</a>(const Indata; var Outdata; Size: longword);
procedure <a href="#DecryptCFB8bit">DecryptCFB8bit</a>(const Indata; var Outdata; Size: longword);
procedure <a href="#EncryptCFBblock">EncryptCFBblock</a>(const Indata; var Outdata; Size: longword);
procedure <a href="#DecryptCFBblock">DecryptCFBblock</a>(const Indata; var Outdata; Size: longword);
procedure <a href="#EncryptOFB">EncryptOFB</a>(const Indata; var Outdata; Size: longword);
procedure <a href="#DecryptOFB">DecryptOFB</a>(const Indata; var Outdata; Size: longword);
procedure <a href="#EncryptCTR">EncryptCTR</a>(const Indata; var Outdata; Size: longword);
procedure <a href="#DecryptCTR">DecryptCTR</a>(const Indata; var Outdata; Size: longword);
</pre>
<hr>
<p><font size="+2">Function descriptions</font>
<p><font size="+1"><a name="BlockSize">property BlockSize: integer;</a></font>
<p>This contains the block size of the cipher in BITS.
<p><font size="+1"><a name="CipherMode">property CipherMode: TDCP_ciphermode;</a></font>
<p>This is the current chaining mode used when <a href="Ciphers.html#Encrypt">Encrypt</a> is called. The available modes are:
<ul>
<li>cmCBC - Cipher block chaining.
<li>cmCFB8bit - 8bit cipher feedback.
<li>cmCFBblock - Cipher feedback (using the block size of the algorithm).
<li>cmOFB - Output feedback.
<li>cmCTR - Counter.
</ul>
<p>Each chaining mode has it's own pro's and cons. See any good book on cryptography or the NIST publication SP800-38A for details on each.
<p><font size="+1"><a name="SetIV">procedure SetIV(const Value);</a></font>
<p>Use this procedure to set the current chaining mode information to Value. This variable should be the same size as the block size. When <a href="Ciphers.html#Reset">Reset</a> is called subsequent to this, the chaining information will be set back to Value.
<p><font size="+1"><a name="GetIV">procedure GetIV(var Value);</a></font>
<p>This returns in Value the current chaining mode information, to get the initial chaining mode information you need to call <a href="Ciphers.html#Reset">Reset</a> before calling GetIV. The variable passed in Value must be at least the same size as the block size otherwise you will get a buffer overflow.
<p><font size="+1"><a name="EncryptCBC">procedure EncryptCBC(const Indata; var Outdata; Size: longword);</a></font><br>
<font size="+1"><a name="DecryptCBC">procedure DecryptCBC(const Indata; var Outdata; Size: longword);</a></font><br>
<font size="+1"><a name="EncryptCFB8bit">procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword);</a></font><br>
<font size="+1"><a name="DecryptCFB8bit">procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword);</a></font><br>
<font size="+1"><a name="EncryptCFBblock">procedure EncryptCFBblock(const Indata; var Outdata; Size: longword);</a></font><br>
<font size="+1"><a name="DecryptCFBblock">procedure DecryptCFBblock(const Indata; var Outdata; Size: longword);</a></font><br>
<font size="+1"><a name="EncryptOFB">procedure EncryptOFB(const Indata; var Outdata; Size: longword);</a></font><br>
<font size="+1"><a name="DecryptOFB">procedure DecryptOFB(const Indata; var Outdata; Size: longword);</a></font><br>
<font size="+1"><a name="EncryptCTR">procedure EncryptCTR(const Indata; var Outdata; Size: longword);</a></font><br>
<font size="+1"><a name="DecryptCTR">procedure DecryptCTR(const Indata; var Outdata; Size: longword);</a></font>
<p>These procedures encrypt/decrypt Size bytes of data from Indata and places the result in Outdata. These all employ chaining mode methods of encryption/decryption and so may need to be used inconjunction with <a href="Ciphers.html#Reset">Reset</a>. The CBC method uses short block encryption as specified in Bruce Schneier's "Applied Cryptography" for data blocks that are not multiples of the block size.
<p>&nbsp;
<p><a href="Index.html">Index</a>, <a href="Ciphers.html">Ciphers</a>, <a href="Hashes.html">Hashes</a>
<p>&nbsp;
<p><em>DCPcrypt is copyrighted &copy; 1999-2002 David Barton.<br>
All trademarks are property of their respective owners.</em>
</body>
</html>