cryptopp 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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