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
115
116
117
118
119
120
121
122
|
/*____________________________________________________________________________
pgpSymmetricCipher.h
Copyright (C) 1997 Network Associates Inc. and affiliated companies.
All rights reserved.
public header file for symmetric ciphers
$Id: pgpSymmetricCipher.h,v 1.22 1999/03/10 02:58:47 heller Exp $
____________________________________________________________________________*/
#ifndef Included_pgpSymmetricCipher_h /* [ */
#define Included_pgpSymmetricCipher_h
#include "pgpPubTypes.h"
#include "pgpMemoryMgr.h"
PGP_BEGIN_C_DECLARATIONS
#if PRAGMA_IMPORT_SUPPORTED
#pragma import on
#endif
/*____________________________________________________________________________
Create a new cipher of the specified algorithm. Cannot be used until
PGPSetSymmetricCipherKey() has been called.
If the algorithm is not available then kPGPError_AlgorithmNotAvailable is
returned.
Existing algorithms have only one key size. Values:
kPGPCipherAlgorithm_CAST5 128 / 8 = 16
kPGPCipherAlgorithm_3DES 192 / 8 = 24
kPGPCipherAlgorithm_IDEA 128 / 8 = 16
In the future symmetric ciphers could be added that have different key
sizes for the same algorithm.
____________________________________________________________________________*/
PGPError PGPNewSymmetricCipherContext( PGPMemoryMgrRef memoryMgr,
PGPCipherAlgorithm algorithm, PGPSize keySizeInBytes,
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).
kKey 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 PGPGetSymmetricCipherBlockSize()).
____________________________________________________________________________*/
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 );
#if PRAGMA_IMPORT_SUPPORTED
#pragma import reset
#endif
PGP_END_C_DECLARATIONS
#endif /* ] Included_pgpSymmetricCipher_h */
/*__Editor_settings____
Local Variables:
tab-width: 4
End:
vi: ts=4 sw=4
vim: si
_____________________*/
|