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
105
106
107
108
109
110
111
112
113
114
|
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: pgpSymmetricCipher.h,v 1.7 2003/10/07 01:29:44 ajivsov Exp $
____________________________________________________________________________*/
#ifndef Included_pgpSymmetricCipher_h /* [ */
#define Included_pgpSymmetricCipher_h
#include "pgpPubTypes.h"
PGP_BEGIN_C_DECLARATIONS
/*____________________________________________________________________________
Create a new cipher of the specified algorithm. The cipher cannot be used
until PGPInitSymmetricCipher() has been called.
If the algorithm is not available then kPGPError_AlgorithmNotAvailable is
returned.
____________________________________________________________________________*/
PGPError PGPNewSymmetricCipherContext( PGPContextRef context,
PGPCipherAlgorithm algorithm,
PGPSymmetricCipherContextRef *outRef );
/*____________________________________________________________________________
Disposal clears all data in memory before releasing it.
____________________________________________________________________________*/
PGPError PGPFreeSymmetricCipherContext( PGPSymmetricCipherContextRef ref );
/*____________________________________________________________________________
Make an exact copy of the cipher, including the key.
____________________________________________________________________________*/
PGPError PGPCopySymmetricCipherContext( PGPSymmetricCipherContextRef ref,
PGPSymmetricCipherContextRef *outRef );
/*____________________________________________________________________________
The key must be set before using; a cipher can be repeatedly reset and
reused with different keys to avoid having to create and destroy new
contexts each time (and it's also cryptographically better not to reuse
a key).
Key size is implicit based on algorithm. 'key' is *copied*. Caller
may want to destroy the original after passing it in.
____________________________________________________________________________*/
PGPError PGPInitSymmetricCipher( PGPSymmetricCipherContextRef ref,
const void *key );
/*____________________________________________________________________________
Wipe any sensitive data in the cipher. Cipher remains alive, but
key must be set before any data is encrypted.
____________________________________________________________________________*/
PGPError PGPWipeSymmetricCipher( PGPSymmetricCipherContextRef ref );
/*____________________________________________________________________________
"Wash" the symmetric cipher
____________________________________________________________________________*/
PGPError PGPWashSymmetricCipher( PGPSymmetricCipherContextRef ref,
void const *buf, PGPSize len);
/*____________________________________________________________________________
Encrypt or decrypt one "block" of data. The block size is determined
by the cipher (see PGPGetSymmetricCipherSizes()).
____________________________________________________________________________*/
PGPError PGPSymmetricCipherEncrypt( PGPSymmetricCipherContextRef ref,
const void *in, void *out );
PGPError PGPSymmetricCipherDecrypt( PGPSymmetricCipherContextRef ref,
const void *in, void *out );
/*____________________________________________________________________________
Determine key and block size for specified algorithm. Stateless routine
does not need a context.
____________________________________________________________________________*/
PGPError PGPGetSymmetricCipherSizes( PGPSymmetricCipherContextRef ref,
PGPSize *keySize, PGPSize *blockSize );
/*____________________________________________________________________________
* This function integrates stream ciphers into framework of block API.
* To encrypt/decrypt data, the caller works with stream cipher in ECB block
* mode and calls this function before and after the last block.
* There is a feedback between the previous block and the current
* block for stream ciphers, so ECB for stream ciphers is similiar to CBC
* with fixed IV for block ciphers.
*
* To indicate the real size of input data the caller must call this function
* with 'size'=0xffffffff before the last block to save a state and then
* call this function again after the last block was encrypted/decrypted
* with the 'size' set to the real number of bytes in the buffer. This
* operation is similiar to padding for block ciphers.
____________________________________________________________________________*/
PGPError PGPSymmetricCipherRollback( PGPSymmetricCipherContextRef ref,
PGPSize size );
PGP_END_C_DECLARATIONS
#endif /* ] Included_pgpSymmetricCipher_h */
/*__Editor_settings____
Local Variables:
tab-width: 4
End:
vi: ts=4 sw=4
vim: si
_____________________*/
|