diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/experimental/blowfish.cpp | 2 | ||||
-rw-r--r-- | src/experimental/blowfish.h | 2 | ||||
-rw-r--r-- | src/experimental/cipher.cpp | 62 | ||||
-rw-r--r-- | src/experimental/cipher.h | 67 |
4 files changed, 63 insertions, 70 deletions
diff --git a/src/experimental/blowfish.cpp b/src/experimental/blowfish.cpp index 797ec73..7f89f0f 100644 --- a/src/experimental/blowfish.cpp +++ b/src/experimental/blowfish.cpp | |||
@@ -9,7 +9,7 @@ using Bu::sio; | |||
9 | SB[3][x.byte.three]) | 9 | SB[3][x.byte.three]) |
10 | 10 | ||
11 | Bu::Blowfish::Blowfish( Bu::Stream &rNext ) : | 11 | Bu::Blowfish::Blowfish( Bu::Stream &rNext ) : |
12 | Bu::Cipher( rNext ) | 12 | Bu::Cipher<8>( rNext ) |
13 | { | 13 | { |
14 | } | 14 | } |
15 | 15 | ||
diff --git a/src/experimental/blowfish.h b/src/experimental/blowfish.h index 4dbd637..c043b12 100644 --- a/src/experimental/blowfish.h +++ b/src/experimental/blowfish.h | |||
@@ -12,7 +12,7 @@ | |||
12 | 12 | ||
13 | namespace Bu | 13 | namespace Bu |
14 | { | 14 | { |
15 | class Blowfish : public Bu::Cipher | 15 | class Blowfish : public Bu::Cipher<8> |
16 | { | 16 | { |
17 | public: | 17 | public: |
18 | Blowfish( Bu::Stream &rNext ); | 18 | Blowfish( Bu::Stream &rNext ); |
diff --git a/src/experimental/cipher.cpp b/src/experimental/cipher.cpp index 3430c08..d6d01c7 100644 --- a/src/experimental/cipher.cpp +++ b/src/experimental/cipher.cpp | |||
@@ -1,65 +1,3 @@ | |||
1 | #include "bu/cipher.h" | 1 | #include "bu/cipher.h" |
2 | 2 | ||
3 | Bu::Cipher::Cipher( Bu::Stream &rNext ) : | ||
4 | Bu::Filter( rNext ) | ||
5 | { | ||
6 | } | ||
7 | |||
8 | Bu::Cipher::~Cipher() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | void Bu::Cipher::start() | ||
13 | { | ||
14 | } | ||
15 | |||
16 | Bu::size Bu::Cipher::stop() | ||
17 | { | ||
18 | return 0; | ||
19 | } | ||
20 | |||
21 | Bu::size Bu::Cipher::read( void *pBuf, Bu::size iBytes ) | ||
22 | { | ||
23 | uint32_t i; | ||
24 | |||
25 | if (iBytes%8) | ||
26 | { | ||
27 | return 0; | ||
28 | } | ||
29 | |||
30 | iBytes /= 8; | ||
31 | |||
32 | for (i=0;i<iBytes;i++) | ||
33 | { | ||
34 | void *pSeg = ((char *)pBuf)+(i*8); | ||
35 | int iRead = rNext.read( pSeg, 8 ); | ||
36 | decipher( pSeg ); | ||
37 | } | ||
38 | |||
39 | return iBytes*8; | ||
40 | } | ||
41 | |||
42 | Bu::size Bu::Cipher::write( const void *pBuf, Bu::size iBytes ) | ||
43 | { | ||
44 | uint32_t i; | ||
45 | |||
46 | if (iBytes%8) | ||
47 | { | ||
48 | return 0; | ||
49 | } | ||
50 | |||
51 | iBytes /= 8; | ||
52 | |||
53 | char buf[8]; | ||
54 | |||
55 | for (i=0;i<iBytes;i++) | ||
56 | { | ||
57 | memcpy( buf, ((const char *)pBuf)+(i*8), 8 ); | ||
58 | encipher( buf ); | ||
59 | rNext.write( buf, 8 ); | ||
60 | } | ||
61 | |||
62 | memset( &buf, 0, 8 ); | ||
63 | return iBytes*8; | ||
64 | } | ||
65 | 3 | ||
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; |