cryptopp 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. data/.gitignore +8 -0
  2. data/MIT-LICENSE +22 -0
  3. data/README +7 -0
  4. data/Rakefile +42 -0
  5. data/cryptopp.gemspec +199 -0
  6. data/ext/.gitignore +5 -0
  7. data/ext/Rakefile +16 -0
  8. data/ext/ciphers.cpp +1402 -0
  9. data/ext/cryptopp.cpp +285 -0
  10. data/ext/cryptopp_ruby_api.h +139 -0
  11. data/ext/defs/block_modes.def +10 -0
  12. data/ext/defs/checksums.def +10 -0
  13. data/ext/defs/ciphers.def +136 -0
  14. data/ext/defs/hashes.def +78 -0
  15. data/ext/defs/hmacs.def +54 -0
  16. data/ext/defs/paddings.def +9 -0
  17. data/ext/defs/rngs.def +7 -0
  18. data/ext/digests.cpp +1120 -0
  19. data/ext/extconf.rb +39 -0
  20. data/ext/j3way.cpp +22 -0
  21. data/ext/j3way.h +29 -0
  22. data/ext/jadler32.h +32 -0
  23. data/ext/jaes.cpp +22 -0
  24. data/ext/jaes.h +31 -0
  25. data/ext/jarc4.cpp +22 -0
  26. data/ext/jarc4.h +37 -0
  27. data/ext/jbase.cpp +172 -0
  28. data/ext/jbase.h +92 -0
  29. data/ext/jbasiccipherinfo.h +74 -0
  30. data/ext/jblowfish.cpp +22 -0
  31. data/ext/jblowfish.h +29 -0
  32. data/ext/jcamellia.cpp +24 -0
  33. data/ext/jcamellia.h +33 -0
  34. data/ext/jcast128.cpp +22 -0
  35. data/ext/jcast128.h +31 -0
  36. data/ext/jcast256.cpp +22 -0
  37. data/ext/jcast256.h +31 -0
  38. data/ext/jcipher.cpp +112 -0
  39. data/ext/jcipher.h +42 -0
  40. data/ext/jcipher_t.h +469 -0
  41. data/ext/jconfig.h +127 -0
  42. data/ext/jconstants.h +189 -0
  43. data/ext/jcrc32.h +32 -0
  44. data/ext/jdes.cpp +22 -0
  45. data/ext/jdes.h +31 -0
  46. data/ext/jdes_ede2.cpp +22 -0
  47. data/ext/jdes_ede2.h +31 -0
  48. data/ext/jdes_ede3.cpp +22 -0
  49. data/ext/jdes_ede3.h +31 -0
  50. data/ext/jdes_xex3.cpp +22 -0
  51. data/ext/jdes_xex3.h +31 -0
  52. data/ext/jdiamond2.cpp +22 -0
  53. data/ext/jdiamond2.h +31 -0
  54. data/ext/jdiamond2lite.cpp +22 -0
  55. data/ext/jdiamond2lite.h +31 -0
  56. data/ext/jexception.h +20 -0
  57. data/ext/jgost.cpp +22 -0
  58. data/ext/jgost.h +31 -0
  59. data/ext/jhash.cpp +92 -0
  60. data/ext/jhash.h +54 -0
  61. data/ext/jhash_t.h +121 -0
  62. data/ext/jhaval.h +64 -0
  63. data/ext/jhelpers.cpp +90 -0
  64. data/ext/jhelpers.h +38 -0
  65. data/ext/jhmac.cpp +44 -0
  66. data/ext/jhmac.h +34 -0
  67. data/ext/jhmac_t.h +125 -0
  68. data/ext/jidea.cpp +22 -0
  69. data/ext/jidea.h +31 -0
  70. data/ext/jmarc4.cpp +22 -0
  71. data/ext/jmarc4.h +37 -0
  72. data/ext/jmars.cpp +22 -0
  73. data/ext/jmars.h +31 -0
  74. data/ext/jmd2.h +56 -0
  75. data/ext/jmd4.h +56 -0
  76. data/ext/jmd5.h +56 -0
  77. data/ext/jpanamacipher.cpp +32 -0
  78. data/ext/jpanamacipher.h +46 -0
  79. data/ext/jpanamahash.h +44 -0
  80. data/ext/jrc2.cpp +44 -0
  81. data/ext/jrc2.h +39 -0
  82. data/ext/jrc5.cpp +22 -0
  83. data/ext/jrc5.h +31 -0
  84. data/ext/jrc6.cpp +22 -0
  85. data/ext/jrc6.h +31 -0
  86. data/ext/jripemd160.h +113 -0
  87. data/ext/jsafer.cpp +32 -0
  88. data/ext/jsafer.h +42 -0
  89. data/ext/jseal.cpp +32 -0
  90. data/ext/jseal.h +42 -0
  91. data/ext/jserpent.cpp +22 -0
  92. data/ext/jserpent.h +31 -0
  93. data/ext/jsha.h +122 -0
  94. data/ext/jshacal2.cpp +22 -0
  95. data/ext/jshacal2.h +31 -0
  96. data/ext/jshark.cpp +24 -0
  97. data/ext/jshark.h +33 -0
  98. data/ext/jsink.cpp +90 -0
  99. data/ext/jsink.h +154 -0
  100. data/ext/jskipjack.cpp +22 -0
  101. data/ext/jskipjack.h +31 -0
  102. data/ext/jsquare.cpp +22 -0
  103. data/ext/jsquare.h +31 -0
  104. data/ext/jstream.cpp +8 -0
  105. data/ext/jstream.h +20 -0
  106. data/ext/jstream_t.h +175 -0
  107. data/ext/jtea.cpp +22 -0
  108. data/ext/jtea.h +31 -0
  109. data/ext/jtiger.h +52 -0
  110. data/ext/jtwofish.cpp +22 -0
  111. data/ext/jtwofish.h +31 -0
  112. data/ext/jwhirlpool.h +52 -0
  113. data/ext/utils.cpp +8 -0
  114. data/extras/parser_c.rb +114 -0
  115. data/test/ciphers_test.rb +37 -0
  116. data/test/data/ciphers/3desval.dat +7 -0
  117. data/test/data/ciphers/3wayval.dat +6 -0
  118. data/test/data/ciphers/arc4.dat +8 -0
  119. data/test/data/ciphers/blowfish.dat +5 -0
  120. data/test/data/ciphers/camellia.dat +7 -0
  121. data/test/data/ciphers/cast128v.dat +5 -0
  122. data/test/data/ciphers/cast256v.dat +5 -0
  123. data/test/data/ciphers/descert.dat +198 -0
  124. data/test/data/ciphers/diamond.dat +9 -0
  125. data/test/data/ciphers/gostval.dat +10 -0
  126. data/test/data/ciphers/ideaval.dat +13 -0
  127. data/test/data/ciphers/marsval.dat +11 -0
  128. data/test/data/ciphers/panamac.dat +7 -0
  129. data/test/data/ciphers/rc2val.dat +10 -0
  130. data/test/data/ciphers/rc5val.dat +7 -0
  131. data/test/data/ciphers/rc6val.dat +8 -0
  132. data/test/data/ciphers/rijndael.dat +11 -0
  133. data/test/data/ciphers/saferval.dat +27 -0
  134. data/test/data/ciphers/seal.dat +3 -0
  135. data/test/data/ciphers/serpentv.dat +11 -0
  136. data/test/data/ciphers/shacal2.dat +7 -0
  137. data/test/data/ciphers/sharkval.dat +9 -0
  138. data/test/data/ciphers/skipjack.dat +3 -0
  139. data/test/data/ciphers/squareva.dat +10 -0
  140. data/test/data/ciphers/twofishv.dat +11 -0
  141. data/test/data/digests/adler32.dat +8 -0
  142. data/test/data/digests/crc32.dat +10 -0
  143. data/test/data/digests/haval.dat +4 -0
  144. data/test/data/digests/havalcer.dat +23 -0
  145. data/test/data/digests/md2.dat +9 -0
  146. data/test/data/digests/md4.dat +9 -0
  147. data/test/data/digests/md5.dat +9 -0
  148. data/test/data/digests/panamah.dat +8 -0
  149. data/test/data/digests/ripemd.dat +43 -0
  150. data/test/data/digests/sha.dat +19 -0
  151. data/test/data/digests/tiger.dat +11 -0
  152. data/test/data/digests/whirlpool.dat +13 -0
  153. data/test/data/hmacs/hmac.dat +6 -0
  154. data/test/digests_test.rb +29 -0
  155. data/test/hmacs_test.rb +38 -0
  156. data/test/test_helper.rb +42 -0
  157. metadata +220 -0
@@ -0,0 +1,121 @@
1
+
2
+ /*
3
+ * Copyright (c) 2002-2010 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2010 Wei Dai
5
+ * See COPYING for the extact license
6
+ */
7
+
8
+ #ifndef __JHASH_T_H__
9
+ #define __JHASH_T_H__
10
+
11
+ #include "jhash.h"
12
+
13
+ #include "files.h"
14
+
15
+ using namespace CryptoPP;
16
+
17
+ template <typename HASH, enum HashEnum TYPE>
18
+ class JHash_Template : public JHash
19
+ {
20
+ public:
21
+ JHash_Template(string plaintext = "");
22
+ enum HashEnum getHashType() const;
23
+ bool hash();
24
+ bool validate();
25
+ bool validate(string plaintext, string hashtext);
26
+ string hashRubyIO(VALUE* in, bool hex = true);
27
+
28
+ /* This is deprecated. It was used before using RubyIO. Use it
29
+ if you're using this code in something other than the CryptoPP Ruby
30
+ extension... */
31
+ //string hashFile(const string filename, bool hex = true);
32
+ };
33
+
34
+ #define HASH_TYPE TYPE
35
+
36
+ template <typename HASH, enum HashEnum TYPE>
37
+ JHash_Template<HASH, TYPE>::JHash_Template(string plaintext) : JHash(plaintext)
38
+ {
39
+ itsHashModule = new HASH;
40
+ }
41
+
42
+ template <typename HASH, enum HashEnum TYPE>
43
+ HashEnum JHash_Template<HASH, TYPE>::getHashType() const
44
+ {
45
+ return TYPE;
46
+ }
47
+
48
+ template <typename HASH, enum HashEnum TYPE>
49
+ bool JHash_Template<HASH, TYPE>::hash()
50
+ {
51
+ itsHashtext.erase();
52
+
53
+ StringSource s(itsPlaintext, true, new HashFilter(*itsHashModule, new StringSink(itsHashtext)));
54
+ return true;
55
+ }
56
+
57
+ template <typename HASH, enum HashEnum TYPE>
58
+ bool JHash_Template<HASH, TYPE>::validate()
59
+ {
60
+ return validate(itsPlaintext, itsHashtext);
61
+ }
62
+
63
+ template <typename HASH, enum HashEnum TYPE>
64
+ bool JHash_Template<HASH, TYPE>::validate(string plaintext, string hashtext)
65
+ {
66
+ if (itsHashModule == NULL) {
67
+ throw;
68
+ }
69
+
70
+ return itsHashModule->VerifyDigest((const byte*) hashtext.data(), (const byte*) plaintext.data(), plaintext.length());
71
+ }
72
+
73
+ template <typename HASH, enum HashEnum TYPE>
74
+ string JHash_Template<HASH, TYPE>::hashRubyIO(VALUE* in, bool hex)
75
+ {
76
+ if (itsHashModule == NULL) {
77
+ throw;
78
+ }
79
+
80
+ string retval;
81
+ try {
82
+ if (hex) {
83
+ RubyIOSource f(&in, true, new HashFilter(*itsHashModule, new HexEncoder(new StringSink(retval), false)));
84
+ }
85
+ else {
86
+ RubyIOSource f(&in, true, new HashFilter(*itsHashModule, new StringSink(retval)));
87
+ }
88
+ }
89
+ catch (Exception e) {
90
+ throw e;
91
+ }
92
+ return retval;
93
+ }
94
+
95
+
96
+ /* This is deprecated. It was used before using RubyIO. Use it
97
+ if you're using this code in something other than the CryptoPP Ruby
98
+ extension... */
99
+ /*template <typename HASH, enum HashEnum TYPE>
100
+ string JHash_Template<HASH, TYPE>::hashFile(const string filename, bool hex)
101
+ {
102
+ if (itsHashModule == NULL) {
103
+ throw;
104
+ }
105
+
106
+ string retval;
107
+ try {
108
+ if (hex) {
109
+ FileSource f(filename.c_str(), true, new HashFilter(*itsHashModule, new HexEncoder(new StringSink(retval), false)));
110
+ }
111
+ else {
112
+ FileSource f(filename.c_str(), true, new HashFilter(*itsHashModule, new StringSink(retval)));
113
+ }
114
+ }
115
+ catch (FileStore::OpenErr e) {
116
+ throw e;
117
+ }
118
+ return retval;
119
+ }*/
120
+
121
+ #endif
@@ -0,0 +1,64 @@
1
+
2
+ /*
3
+ * Copyright (c) 2002-2010 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2010 Wei Dai
5
+ * See COPYING for the extact license
6
+ */
7
+
8
+ #ifndef __JHAVAL_H__
9
+ #define __JHAVAL_H__
10
+
11
+ #include "jconfig.h"
12
+
13
+ #if ENABLED_HAVAL_HASH || ENABLED_HAVAL3_HASH || ENABLED_HAVAL4_HASH || ENABLED_HAVAL5_HASH
14
+
15
+ #include "jhash_t.h"
16
+
17
+ // Crypto++ headers...
18
+
19
+ #include "haval.h"
20
+
21
+ using namespace CryptoPP;
22
+
23
+ #if ENABLED_HAVAL_HASH
24
+ class JHAVAL : public JHash_Template<HAVAL, HAVAL_HASH>
25
+ {
26
+ public:
27
+ JHAVAL(string plaintext = "") : JHash_Template<HAVAL, HAVAL_HASH>(plaintext) { }
28
+
29
+ static string getHashName() { return "HAVAL"; }
30
+ };
31
+ #endif
32
+
33
+ #if ENABLED_HAVAL3_HASH
34
+ class JHAVAL3 : public JHash_Template<HAVAL3, HAVAL3_HASH>
35
+ {
36
+ public:
37
+ JHAVAL3(string plaintext = "") : JHash_Template<HAVAL3, HAVAL3_HASH>(plaintext) { }
38
+
39
+ static string getHashName() { return "HAVAL3"; }
40
+ };
41
+ #endif
42
+
43
+ #if ENABLED_HAVAL4_HASH
44
+ class JHAVAL4 : public JHash_Template<HAVAL4, HAVAL4_HASH>
45
+ {
46
+ public:
47
+ JHAVAL4(string plaintext = "") : JHash_Template<HAVAL4, HAVAL4_HASH>(plaintext) { }
48
+
49
+ static string getHashName() { return "HAVAL4"; }
50
+ };
51
+ #endif
52
+
53
+ #if ENABLED_HAVAL5_HASH
54
+ class JHAVAL5 : public JHash_Template<HAVAL5, HAVAL5_HASH>
55
+ {
56
+ public:
57
+ JHAVAL5(string plaintext = "") : JHash_Template<HAVAL5, HAVAL5_HASH>(plaintext) { }
58
+
59
+ static string getHashName() { return "HAVAL5"; }
60
+ };
61
+ #endif
62
+
63
+ #endif
64
+ #endif
@@ -0,0 +1,90 @@
1
+
2
+ /*
3
+ * Copyright (c) 2002-2010 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2010 Wei Dai
5
+ * See COPYING for the extact license
6
+ */
7
+
8
+ #include "jhelpers.h"
9
+
10
+ using namespace CryptoPP;
11
+
12
+ string bin2hex(const string bin, const bool uppercase)
13
+ {
14
+ string retval;
15
+ StringSource(bin, true, new HexEncoder(new StringSink(retval), uppercase));
16
+ return retval;
17
+ }
18
+
19
+ string hex2bin(const string hex)
20
+ {
21
+ string retval;
22
+ StringSource(hex, true, new HexDecoder(new StringSink(retval)));
23
+ return retval;
24
+ }
25
+
26
+ char* bin2hex(const char* bin, size_t length, const bool uppercase)
27
+ {
28
+ char* retval = new char[length * 2 + 1];
29
+ StringSource(bin, true, new HexEncoder(new ArraySink((byte*) retval, length * 2), uppercase));
30
+ return retval;
31
+ }
32
+
33
+ char* hex2bin(const char* hex, size_t length)
34
+ {
35
+ char* retval = new char[length / 2 + 1];
36
+ StringSource(hex, true, new HexDecoder(new ArraySink((byte*) retval, length / 2)));
37
+ return retval;
38
+ }
39
+
40
+ string generateIV(const unsigned int size, const enum RNGEnum rng)
41
+ {
42
+ string retval;
43
+ RandomNumberGenerator* randPool = NULL;
44
+
45
+ #ifdef NONBLOCKING_RNG_AVAILABLE
46
+ if (rng == NON_BLOCKING_RNG) {
47
+ randPool = new NonblockingRng;
48
+ }
49
+ #endif
50
+
51
+ #if defined(NONBLOCKING_RNG_AVAILABLE) && defined(BLOCKING_RNG_AVAILABLE)
52
+ else
53
+ #endif
54
+
55
+ #ifdef BLOCKING_RNG_AVAILABLE
56
+ if (rng == BLOCKING_RNG) {
57
+ randPool = new BlockingRng;
58
+ }
59
+ #endif
60
+
61
+ if (rng == RAND_RNG) {
62
+ for (unsigned int i = 0; i < size; i++) {
63
+ retval += (char)(255.0 * rand() / RAND_MAX);
64
+ }
65
+ }
66
+ else if (randPool != NULL) {
67
+ for (unsigned int i = 0; i < size; i++) {
68
+ retval += (char) randPool->GenerateByte();
69
+ }
70
+ delete randPool;
71
+ }
72
+
73
+ return retval;
74
+ }
75
+
76
+ unsigned int checkBounds(unsigned int length, unsigned int min, unsigned int max, unsigned short int multiple)
77
+ {
78
+ if (min == max) {
79
+ return min;
80
+ }
81
+ else if (length < min) {
82
+ return min;
83
+ }
84
+ else if (length > max) {
85
+ return max;
86
+ }
87
+ else {
88
+ return (length + multiple - 1) - ((length + multiple - 1) % multiple);
89
+ }
90
+ }
@@ -0,0 +1,38 @@
1
+
2
+ /*
3
+ * Copyright (c) 2002-2010 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2010 Wei Dai
5
+ * See COPYING for the extact license
6
+ */
7
+
8
+ #ifndef __JHELPERS_H__
9
+ #define __JHELPERS_H__
10
+
11
+ #include <string>
12
+ #include <cctype>
13
+
14
+ // Crypto++ headers...
15
+
16
+ #include "hex.h"
17
+ #include "osrng.h"
18
+
19
+ #include "jconstants.h"
20
+
21
+ typedef unsigned char byte;
22
+
23
+ using namespace std;
24
+
25
+ string bin2hex(const string bin, const bool uppercase = false);
26
+ string hex2bin(const string hex);
27
+
28
+ char* bin2hex(const char* bin, size_t length, const bool uppercase = false);
29
+ char* hex2bin(const char* hex, size_t length);
30
+
31
+ string generateIV(const unsigned int size, const enum RNGEnum rng = DEFAULT_RNG);
32
+
33
+ // used to check the bounds of things like keylengths,
34
+ // rounds to perform, etc.:
35
+
36
+ unsigned int checkBounds(unsigned int length, unsigned int min, unsigned int max, unsigned short int multiple = 1);
37
+
38
+ #endif
@@ -0,0 +1,44 @@
1
+
2
+ /*
3
+ * Copyright (c) 2002-2010 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2010 Wei Dai
5
+ * See COPYING for the extact license
6
+ */
7
+
8
+ #include "jhmac.h"
9
+
10
+ unsigned int JHMAC::getKeylength() const
11
+ {
12
+ return itsKeylength;
13
+ }
14
+
15
+ string JHMAC::getKey(const bool hex) const
16
+ {
17
+ if (hex) {
18
+ return bin2hex(itsKey);
19
+ }
20
+ else {
21
+ return itsKey;
22
+ }
23
+ }
24
+
25
+ unsigned int JHMAC::setKeylength(const unsigned int keylength)
26
+ {
27
+ itsKeylength = checkBounds(keylength, 0, UINT_MAX);
28
+
29
+ return itsKeylength;
30
+ }
31
+
32
+ unsigned int JHMAC::setKey(const string key, const bool hex)
33
+ {
34
+ if (hex) {
35
+ itsKey = hex2bin(key);
36
+ }
37
+ else {
38
+ itsKey = key;
39
+ }
40
+
41
+ itsKey.resize(setKeylength(itsKey.length()));
42
+
43
+ return itsKeylength;
44
+ }
@@ -0,0 +1,34 @@
1
+
2
+ /*
3
+ * Copyright (c) 2002-2010 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2010 Wei Dai
5
+ * See COPYING for the extact license
6
+ */
7
+
8
+ #ifndef __JHMAC_H__
9
+ #define __JHMAC_H__
10
+
11
+ #include "jhash.h"
12
+
13
+ using namespace CryptoPP;
14
+
15
+ class JHMAC : public JHash
16
+ {
17
+ public:
18
+ JHMAC(string plaintext = "") : JHash(plaintext)
19
+ {
20
+ itsKeylength = 16;
21
+ }
22
+
23
+ unsigned int getKeylength() const;
24
+ string getKey(const bool hex = false) const;
25
+
26
+ unsigned int setKeylength(const unsigned int keylength);
27
+ unsigned int setKey(const string key, const bool hex = false);
28
+
29
+ protected:
30
+ string itsKey;
31
+ unsigned int itsKeylength;
32
+ };
33
+
34
+ #endif
@@ -0,0 +1,125 @@
1
+
2
+ /*
3
+ * Copyright (c) 2002-2010 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2010 Wei Dai
5
+ * See COPYING for the extact license
6
+ */
7
+
8
+ #ifndef __JHMAC_T_H__
9
+ #define __JHMAC_T_H__
10
+
11
+ #include "jhmac.h"
12
+
13
+ // Crypto++ headers...
14
+
15
+ #include "hmac.h"
16
+
17
+ using namespace CryptoPP;
18
+
19
+ template <typename HASH, enum HashEnum TYPE>
20
+ class JHMAC_Template : public JHMAC
21
+ {
22
+ public:
23
+ JHMAC_Template(string plaintext = "");
24
+ inline enum HashEnum getHashType() const;
25
+ bool hash();
26
+ bool validate();
27
+ bool validate(string plaintext, string hashtext);
28
+ string hashRubyIO(VALUE* in, bool hex = true);
29
+
30
+ /* This is deprecated. It was used before using php_streams. Use it
31
+ if you're using this code in something other than the cryptopp PHP
32
+ extension...*/
33
+ //string hashFile(const string filename, bool hex = true);
34
+ };
35
+
36
+ template <typename HASH, enum HashEnum TYPE>
37
+ JHMAC_Template<HASH, TYPE>::JHMAC_Template(string plaintext) : JHMAC(plaintext)
38
+ {
39
+ itsHashModule = new HMAC<HASH>;
40
+ }
41
+
42
+ template <typename HASH, enum HashEnum TYPE>
43
+ HashEnum JHMAC_Template<HASH, TYPE>::getHashType() const
44
+ {
45
+ return TYPE;
46
+ }
47
+
48
+ template <typename HASH, enum HashEnum TYPE>
49
+ bool JHMAC_Template<HASH, TYPE>::hash()
50
+ {
51
+ ((HMAC<HASH>*) itsHashModule)->SetKey((byte*) itsKey.data(), itsKeylength);
52
+ itsHashtext.erase();
53
+ StringSource s(itsPlaintext, true, new HashFilter(*itsHashModule, new StringSink(itsHashtext)));
54
+ return true;
55
+ }
56
+
57
+ template <typename HASH, enum HashEnum TYPE>
58
+ bool JHMAC_Template<HASH, TYPE>::validate()
59
+ {
60
+ return validate(itsPlaintext, itsHashtext);
61
+ }
62
+
63
+ template <typename HASH, enum HashEnum TYPE>
64
+ bool JHMAC_Template<HASH, TYPE>::validate(string plaintext, string hashtext)
65
+ {
66
+ if (itsHashModule == NULL) {
67
+ throw;
68
+ }
69
+
70
+ ((HMAC<HASH>*) itsHashModule)->SetKey((byte*) itsKey.data(), itsKeylength);
71
+
72
+ return itsHashModule->VerifyDigest((const byte*) hashtext.data(), (const byte*) plaintext.data(), plaintext.length());
73
+ }
74
+
75
+ template <typename HASH, enum HashEnum TYPE>
76
+ string JHMAC_Template<HASH, TYPE>::hashRubyIO(VALUE* in, bool hex)
77
+ {
78
+ if (itsHashModule == NULL) {
79
+ throw;
80
+ }
81
+
82
+ ((HMAC<HASH>*) itsHashModule)->SetKey((byte*) itsKey.data(), itsKeylength);
83
+ string retval;
84
+ try {
85
+ if (hex) {
86
+ RubyIOSource f(&in, true, new HashFilter(*itsHashModule, new HexEncoder(new StringSink(retval), false)));
87
+ }
88
+ else {
89
+ RubyIOSource f(&in, true, new HashFilter(*itsHashModule, new StringSink(retval)));
90
+ }
91
+ }
92
+ catch (Exception e) {
93
+ throw e;
94
+ }
95
+ return retval;
96
+ }
97
+
98
+
99
+ /* This is deprecated. It was used before using php_streams. Use it
100
+ if you're using this code in something other than the cryptopp PHP
101
+ extension... */
102
+ /*template <typename HASH, enum HashEnum TYPE>
103
+ string JHMAC_Template<HASH, TYPE>::hashFile(const string filename, bool hex)
104
+ {
105
+ if (itsHashModule == NULL) {
106
+ throw;
107
+ }
108
+
109
+ ((HMAC<HASH>*) itsHashModule)->SetKey((byte*) itsKey.data(), itsKeylength);
110
+ string retval;
111
+ try {
112
+ if (hex) {
113
+ FileSource f(filename.c_str(), true, new HashFilter(*itsHashModule, new HexEncoder(new StringSink(retval), false)));
114
+ }
115
+ else {
116
+ FileSource f(filename.c_str(), true, new HashFilter(*itsHashModule, new StringSink(retval)));
117
+ }
118
+ }
119
+ catch (FileStore::OpenErr e) {
120
+ throw e;
121
+ }
122
+ return retval;
123
+ }*/
124
+
125
+ #endif