diff options
Diffstat (limited to 'src/experimental/cipher.h')
-rw-r--r-- | src/experimental/cipher.h | 67 |
1 files changed, 61 insertions, 6 deletions
diff --git a/src/experimental/cipher.h b/src/experimental/cipher.h index 2327aa6..613bc88 100644 --- a/src/experimental/cipher.h +++ b/src/experimental/cipher.h | |||
@@ -5,17 +5,72 @@ | |||
5 | 5 | ||
6 | namespace Bu | 6 | namespace Bu |
7 | { | 7 | { |
8 | template<int iBlockSize> | ||
8 | class Cipher : Bu::Filter | 9 | class Cipher : Bu::Filter |
9 | { | 10 | { |
10 | public: | 11 | public: |
11 | Cipher( Bu::Stream &rNext ); | 12 | Cipher( Bu::Stream &rNext ) : |
12 | virtual ~Cipher(); | 13 | Bu::Filter( rNext ) |
14 | { | ||
15 | } | ||
13 | 16 | ||
14 | virtual void start(); | 17 | virtual ~Cipher() |
15 | virtual Bu::size stop(); | 18 | { |
19 | } | ||
16 | 20 | ||
17 | virtual Bu::size read( void *pBuf, Bu::size iBytes ); | 21 | virtual void start() |
18 | virtual Bu::size write( const void *pBuf, Bu::size iBytes ); | 22 | { |
23 | } | ||
24 | |||
25 | virtual Bu::size stop() | ||
26 | { | ||
27 | return 0; | ||
28 | } | ||
29 | |||
30 | virtual Bu::size read( void *pBuf, Bu::size iBytes ) | ||
31 | { | ||
32 | uint32_t i; | ||
33 | |||
34 | if (iBytes%iBlockSize) | ||
35 | { | ||
36 | return 0; | ||
37 | } | ||
38 | |||
39 | iBytes /= iBlockSize; | ||
40 | |||
41 | for (i=0;i<iBytes;i++) | ||
42 | { | ||
43 | void *pSeg = ((char *)pBuf)+(i*iBlockSize); | ||
44 | int iRead = rNext.read( pSeg, iBlockSize ); | ||
45 | decipher( pSeg ); | ||
46 | } | ||
47 | |||
48 | return iBytes*iBlockSize; | ||
49 | } | ||
50 | |||
51 | virtual Bu::size write( const void *pBuf, Bu::size iBytes ) | ||
52 | { | ||
53 | uint32_t i; | ||
54 | |||
55 | if (iBytes%iBlockSize) | ||
56 | { | ||
57 | return 0; | ||
58 | } | ||
59 | |||
60 | iBytes /= iBlockSize; | ||
61 | |||
62 | char buf[iBlockSize]; | ||
63 | |||
64 | for (i=0;i<iBytes;i++) | ||
65 | { | ||
66 | memcpy( buf, ((const char *)pBuf)+(i*iBlockSize), 8 ); | ||
67 | encipher( buf ); | ||
68 | rNext.write( buf, iBlockSize ); | ||
69 | } | ||
70 | |||
71 | memset( &buf, 0, iBlockSize ); | ||
72 | return iBytes*iBlockSize; | ||
73 | } | ||
19 | 74 | ||
20 | using Bu::Stream::read; | 75 | using Bu::Stream::read; |
21 | using Bu::Stream::write; | 76 | using Bu::Stream::write; |