cryptopp 0.0.4 → 0.0.5

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 (195) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/Gemfile +14 -0
  4. data/Guardfile +17 -0
  5. data/MIT-LICENSE +1 -1
  6. data/Rakefile +20 -27
  7. data/VERSION +1 -0
  8. data/cryptopp.gemspec +7 -182
  9. data/ext/Rakefile +2 -2
  10. data/ext/ciphers.cpp +619 -619
  11. data/ext/cryptopp.cpp +220 -217
  12. data/ext/cryptopp_ruby_api.h +7 -7
  13. data/ext/defs/hashes.def +16 -0
  14. data/ext/defs/hmacs.def +16 -0
  15. data/ext/digests.cpp +635 -601
  16. data/ext/extconf.rb +61 -19
  17. data/ext/j3way.cpp +5 -5
  18. data/ext/j3way.h +6 -6
  19. data/ext/jadler32.h +6 -6
  20. data/ext/jaes.cpp +5 -5
  21. data/ext/jaes.h +6 -6
  22. data/ext/jarc4.cpp +5 -5
  23. data/ext/jarc4.h +6 -6
  24. data/ext/jbase.cpp +94 -94
  25. data/ext/jbase.h +49 -55
  26. data/ext/jbasiccipherinfo.h +23 -23
  27. data/ext/jblowfish.cpp +5 -5
  28. data/ext/jblowfish.h +6 -6
  29. data/ext/jcamellia.cpp +5 -7
  30. data/ext/jcamellia.h +6 -8
  31. data/ext/jcast128.cpp +5 -5
  32. data/ext/jcast128.h +6 -6
  33. data/ext/jcast256.cpp +5 -5
  34. data/ext/jcast256.h +6 -6
  35. data/ext/jcipher.cpp +62 -62
  36. data/ext/jcipher.h +24 -24
  37. data/ext/jcipher_t.h +383 -383
  38. data/ext/jconfig.h +29 -46
  39. data/ext/jconstants.h +120 -122
  40. data/ext/jcrc32.h +6 -6
  41. data/ext/jdes.cpp +5 -5
  42. data/ext/jdes.h +6 -6
  43. data/ext/jdes_ede2.cpp +5 -5
  44. data/ext/jdes_ede2.h +6 -6
  45. data/ext/jdes_ede3.cpp +5 -5
  46. data/ext/jdes_ede3.h +6 -6
  47. data/ext/jdes_xex3.cpp +5 -5
  48. data/ext/jdes_xex3.h +6 -6
  49. data/ext/jdiamond2.cpp +5 -5
  50. data/ext/jdiamond2.h +6 -6
  51. data/ext/jdiamond2lite.cpp +5 -5
  52. data/ext/jdiamond2lite.h +6 -6
  53. data/ext/jexception.h +5 -5
  54. data/ext/jgost.cpp +5 -5
  55. data/ext/jgost.h +6 -6
  56. data/ext/jhash.cpp +51 -51
  57. data/ext/jhash.h +22 -27
  58. data/ext/jhash_t.h +59 -59
  59. data/ext/jhaval.h +15 -15
  60. data/ext/jhelpers.cpp +54 -54
  61. data/ext/jhelpers.h +3 -3
  62. data/ext/jhmac.cpp +20 -20
  63. data/ext/jhmac.h +15 -15
  64. data/ext/jhmac_t.h +40 -72
  65. data/ext/jidea.cpp +5 -5
  66. data/ext/jidea.h +6 -6
  67. data/ext/jmarc4.cpp +5 -5
  68. data/ext/jmarc4.h +6 -6
  69. data/ext/jmars.cpp +5 -5
  70. data/ext/jmars.h +6 -6
  71. data/ext/jmd2.h +9 -9
  72. data/ext/jmd4.h +9 -9
  73. data/ext/jmd5.h +9 -9
  74. data/ext/jpanamacipher.cpp +7 -7
  75. data/ext/jpanamacipher.h +9 -9
  76. data/ext/jpanamahash.h +9 -9
  77. data/ext/jrc2.cpp +15 -15
  78. data/ext/jrc2.h +11 -11
  79. data/ext/jrc5.cpp +5 -5
  80. data/ext/jrc5.h +6 -6
  81. data/ext/jrc6.cpp +5 -5
  82. data/ext/jrc6.h +6 -6
  83. data/ext/jripemd160.h +28 -28
  84. data/ext/jsafer.cpp +7 -7
  85. data/ext/jsafer.h +9 -9
  86. data/ext/jseal.cpp +7 -7
  87. data/ext/jseal.h +9 -9
  88. data/ext/jserpent.cpp +5 -5
  89. data/ext/jserpent.h +6 -6
  90. data/ext/jsha.h +38 -37
  91. data/ext/jsha3.h +130 -0
  92. data/ext/jsha3_blocksizes.h +73 -0
  93. data/ext/jshacal2.cpp +5 -5
  94. data/ext/jshacal2.h +6 -6
  95. data/ext/jshark.cpp +5 -7
  96. data/ext/jshark.h +6 -8
  97. data/ext/jsink.cpp +57 -57
  98. data/ext/jsink.h +127 -123
  99. data/ext/jskipjack.cpp +5 -5
  100. data/ext/jskipjack.h +6 -6
  101. data/ext/jsquare.cpp +5 -5
  102. data/ext/jsquare.h +6 -6
  103. data/ext/jstream.cpp +3 -3
  104. data/ext/jstream.h +3 -3
  105. data/ext/jstream_t.h +74 -126
  106. data/ext/jtea.cpp +5 -5
  107. data/ext/jtea.h +6 -6
  108. data/ext/jtiger.h +9 -11
  109. data/ext/jtwofish.cpp +5 -5
  110. data/ext/jtwofish.h +6 -6
  111. data/ext/jwhirlpool.h +9 -11
  112. data/ext/utils.cpp +3 -3
  113. data/extras/parser_c.rb +102 -102
  114. data/test/ciphers_test.rb +24 -30
  115. data/test/data/ciphers/3desval.yml +13 -0
  116. data/test/data/ciphers/3wayval.yml +17 -0
  117. data/test/data/ciphers/arc4.yml +22 -0
  118. data/test/data/ciphers/blowfish.yml +9 -0
  119. data/test/data/ciphers/camellia.yml +21 -0
  120. data/test/data/ciphers/cast128v.yml +13 -0
  121. data/test/data/ciphers/cast256v.yml +13 -0
  122. data/test/data/ciphers/descert.yml +723 -0
  123. data/test/data/ciphers/diamond.yml +31 -0
  124. data/test/data/ciphers/gostval.yml +33 -0
  125. data/test/data/ciphers/ideaval.yml +45 -0
  126. data/test/data/ciphers/marsval.yml +37 -0
  127. data/test/data/ciphers/panamac.yml +11 -0
  128. data/test/data/ciphers/rc2val.yml +49 -0
  129. data/test/data/ciphers/rc5val.yml +26 -0
  130. data/test/data/ciphers/rc6val.yml +25 -0
  131. data/test/data/ciphers/rijndael.yml +37 -0
  132. data/test/data/ciphers/saferval.yml +77 -0
  133. data/test/data/ciphers/seal.yml +6 -0
  134. data/test/data/ciphers/serpentv.yml +37 -0
  135. data/test/data/ciphers/shacal2.yml +21 -0
  136. data/test/data/ciphers/sharkval.yml +29 -0
  137. data/test/data/ciphers/skipjack.yml +5 -0
  138. data/test/data/ciphers/squareva.yml +33 -0
  139. data/test/data/ciphers/twofishv.yml +37 -0
  140. data/test/data/digests/adler32.yml +19 -0
  141. data/test/data/digests/crc32.yml +25 -0
  142. data/test/data/digests/haval.yml +7 -0
  143. data/test/data/digests/havalcer.yml +1 -0
  144. data/test/data/digests/md2.yml +22 -0
  145. data/test/data/digests/md4.yml +22 -0
  146. data/test/data/digests/md5.yml +22 -0
  147. data/test/data/digests/panamah.yml +13 -0
  148. data/test/data/digests/ripemd.yml +97 -0
  149. data/test/data/digests/sha.yml +25 -0
  150. data/test/data/digests/sha3.yml +23 -0
  151. data/test/data/digests/tiger.yml +30 -0
  152. data/test/data/digests/whirlpool.yml +25 -0
  153. data/test/data/hmacs/hmac.yml +14 -0
  154. data/test/digests_test.rb +17 -23
  155. data/test/hmacs_test.rb +25 -31
  156. data/test/test_helper.rb +31 -37
  157. metadata +70 -82
  158. data/test/data/ciphers/3desval.dat +0 -7
  159. data/test/data/ciphers/3wayval.dat +0 -6
  160. data/test/data/ciphers/arc4.dat +0 -8
  161. data/test/data/ciphers/blowfish.dat +0 -5
  162. data/test/data/ciphers/camellia.dat +0 -7
  163. data/test/data/ciphers/cast128v.dat +0 -5
  164. data/test/data/ciphers/cast256v.dat +0 -5
  165. data/test/data/ciphers/descert.dat +0 -198
  166. data/test/data/ciphers/diamond.dat +0 -9
  167. data/test/data/ciphers/gostval.dat +0 -10
  168. data/test/data/ciphers/ideaval.dat +0 -13
  169. data/test/data/ciphers/marsval.dat +0 -11
  170. data/test/data/ciphers/panamac.dat +0 -7
  171. data/test/data/ciphers/rc2val.dat +0 -10
  172. data/test/data/ciphers/rc5val.dat +0 -7
  173. data/test/data/ciphers/rc6val.dat +0 -8
  174. data/test/data/ciphers/rijndael.dat +0 -11
  175. data/test/data/ciphers/saferval.dat +0 -27
  176. data/test/data/ciphers/seal.dat +0 -3
  177. data/test/data/ciphers/serpentv.dat +0 -11
  178. data/test/data/ciphers/shacal2.dat +0 -7
  179. data/test/data/ciphers/sharkval.dat +0 -9
  180. data/test/data/ciphers/skipjack.dat +0 -3
  181. data/test/data/ciphers/squareva.dat +0 -10
  182. data/test/data/ciphers/twofishv.dat +0 -11
  183. data/test/data/digests/adler32.dat +0 -8
  184. data/test/data/digests/crc32.dat +0 -10
  185. data/test/data/digests/haval.dat +0 -4
  186. data/test/data/digests/havalcer.dat +0 -23
  187. data/test/data/digests/md2.dat +0 -9
  188. data/test/data/digests/md4.dat +0 -9
  189. data/test/data/digests/md5.dat +0 -9
  190. data/test/data/digests/panamah.dat +0 -8
  191. data/test/data/digests/ripemd.dat +0 -43
  192. data/test/data/digests/sha.dat +0 -19
  193. data/test/data/digests/tiger.dat +0 -11
  194. data/test/data/digests/whirlpool.dat +0 -13
  195. data/test/data/hmacs/hmac.dat +0 -6
@@ -0,0 +1,73 @@
1
+ // sha3.h - written and placed in the public domain by Wei Dai
2
+ //
3
+ // This is a patched version of sha3.h that includes definitions for the
4
+ // BLOCKSIZE constants that appear to be missing from the header file.
5
+ // See http://sourceforge.net/apps/trac/cryptopp/ticket/31 for details.
6
+
7
+ #ifndef CRYPTOPP_JSHA3_BLOCKSIZES_H
8
+ #define CRYPTOPP_JSHA3_BLOCKSIZES_H
9
+
10
+ #include "cryptlib.h"
11
+ #include "secblock.h"
12
+
13
+ NAMESPACE_BEGIN(CryptoPP)
14
+
15
+ /// <a href="http://en.wikipedia.org/wiki/SHA-3">SHA-3</a>
16
+ class SHA3 : public HashTransformation
17
+ {
18
+ public:
19
+ SHA3(unsigned int digestSize) : m_digestSize(digestSize) {Restart();}
20
+ unsigned int DigestSize() const {return m_digestSize;}
21
+ std::string AlgorithmName() const {return "SHA-3-" + IntToString(m_digestSize*8);}
22
+ unsigned int OptimalDataAlignment() const {return GetAlignmentOf<word64>();}
23
+
24
+ void Update(const byte *input, size_t length);
25
+ void Restart();
26
+ void TruncatedFinal(byte *hash, size_t size);
27
+
28
+ protected:
29
+ inline unsigned int r() const {return 200 - 2 * m_digestSize;}
30
+
31
+ FixedSizeSecBlock<word64, 25> m_state;
32
+ unsigned int m_digestSize, m_counter;
33
+ };
34
+
35
+ class SHA3_224 : public SHA3
36
+ {
37
+ public:
38
+ CRYPTOPP_CONSTANT(DIGESTSIZE = 28)
39
+ CRYPTOPP_CONSTANT(BLOCKSIZE = 144)
40
+ SHA3_224() : SHA3(DIGESTSIZE) {}
41
+ static const char * StaticAlgorithmName() {return "SHA-3-224";}
42
+ };
43
+
44
+ class SHA3_256 : public SHA3
45
+ {
46
+ public:
47
+ CRYPTOPP_CONSTANT(DIGESTSIZE = 32)
48
+ CRYPTOPP_CONSTANT(BLOCKSIZE = 136)
49
+ SHA3_256() : SHA3(DIGESTSIZE) {}
50
+ static const char * StaticAlgorithmName() {return "SHA-3-256";}
51
+ };
52
+
53
+ class SHA3_384 : public SHA3
54
+ {
55
+ public:
56
+ CRYPTOPP_CONSTANT(DIGESTSIZE = 48)
57
+ CRYPTOPP_CONSTANT(BLOCKSIZE = 104)
58
+ SHA3_384() : SHA3(DIGESTSIZE) {}
59
+ static const char * StaticAlgorithmName() {return "SHA-3-384";}
60
+ };
61
+
62
+ class SHA3_512 : public SHA3
63
+ {
64
+ public:
65
+ CRYPTOPP_CONSTANT(DIGESTSIZE = 64)
66
+ CRYPTOPP_CONSTANT(BLOCKSIZE = 72)
67
+ SHA3_512() : SHA3(DIGESTSIZE) {}
68
+ static const char * StaticAlgorithmName() {return "SHA-3-512";}
69
+ };
70
+
71
+ NAMESPACE_END
72
+
73
+ #endif
@@ -1,8 +1,8 @@
1
1
 
2
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
3
+ * Copyright (c) 2002-2014 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2013 Wei Dai
5
+ * See MIT-LICENSE for the extact license
6
6
  */
7
7
 
8
8
  #include "jshacal2.h"
@@ -11,12 +11,12 @@
11
11
 
12
12
  BlockCipher* JSHACAL2::getEncryptionObject()
13
13
  {
14
- return new SHACAL2Encryption((byte*) itsKey.data(), itsKeylength);
14
+ return new SHACAL2Encryption((byte*) itsKey.data(), itsKeylength);
15
15
  }
16
16
 
17
17
  BlockCipher* JSHACAL2::getDecryptionObject()
18
18
  {
19
- return new SHACAL2Decryption((byte*) itsKey.data(), itsKeylength);
19
+ return new SHACAL2Decryption((byte*) itsKey.data(), itsKeylength);
20
20
  }
21
21
 
22
22
  #endif
@@ -1,8 +1,8 @@
1
1
 
2
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
3
+ * Copyright (c) 2002-2014 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2013 Wei Dai
5
+ * See MIT-LICENSE for the extact license
6
6
  */
7
7
 
8
8
  #ifndef __JSHACAL2_H__
@@ -22,9 +22,9 @@ using namespace CryptoPP;
22
22
 
23
23
  class JSHACAL2 : public JCipher_Template<SHACAL2_Info, SHACAL2_CIPHER>
24
24
  {
25
- protected:
26
- BlockCipher* getEncryptionObject();
27
- BlockCipher* getDecryptionObject();
25
+ protected:
26
+ BlockCipher* getEncryptionObject();
27
+ BlockCipher* getDecryptionObject();
28
28
  };
29
29
 
30
30
  #endif
@@ -1,24 +1,22 @@
1
1
 
2
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
3
+ * Copyright (c) 2002-2014 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2013 Wei Dai
5
+ * See MIT-LICENSE for the extact license
6
6
  */
7
7
 
8
8
  #include "jshark.h"
9
9
 
10
- #ifdef WORD64_AVAILABLE
11
10
  #if ENABLED_SHARK_CIPHER
12
11
 
13
12
  BlockCipher* JSHARK::getEncryptionObject()
14
13
  {
15
- return new SHARKEncryption((byte*) itsKey.data(), itsKeylength, itsRounds);
14
+ return new SHARKEncryption((byte*) itsKey.data(), itsKeylength, itsRounds);
16
15
  }
17
16
 
18
17
  BlockCipher* JSHARK::getDecryptionObject()
19
18
  {
20
- return new SHARKDecryption((byte*) itsKey.data(), itsKeylength, itsRounds);
19
+ return new SHARKDecryption((byte*) itsKey.data(), itsKeylength, itsRounds);
21
20
  }
22
21
 
23
22
  #endif
24
- #endif
@@ -1,8 +1,8 @@
1
1
 
2
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
3
+ * Copyright (c) 2002-2014 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2013 Wei Dai
5
+ * See MIT-LICENSE for the extact license
6
6
  */
7
7
 
8
8
  #ifndef __JSHARK_H__
@@ -10,7 +10,6 @@
10
10
 
11
11
  #include "jconfig.h"
12
12
 
13
- #ifdef WORD64_AVAILABLE
14
13
  #if ENABLED_SHARK_CIPHER
15
14
 
16
15
  #include "jcipher_t.h"
@@ -23,11 +22,10 @@ using namespace CryptoPP;
23
22
 
24
23
  class JSHARK : public JCipher_Template<SHARK_Info, SHARK_CIPHER, 6, 2, INT_MAX>
25
24
  {
26
- protected:
27
- BlockCipher* getEncryptionObject();
28
- BlockCipher* getDecryptionObject();
25
+ protected:
26
+ BlockCipher* getEncryptionObject();
27
+ BlockCipher* getDecryptionObject();
29
28
  };
30
29
 
31
30
  #endif
32
31
  #endif
33
- #endif
@@ -1,90 +1,90 @@
1
1
 
2
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
3
+ * Copyright (c) 2002-2014 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2013 Wei Dai
5
+ * See MIT-LICENSE for the extact license
6
6
  */
7
7
 
8
8
  #include "jsink.h"
9
9
 
10
10
  void RubyIOStore::StoreInitialize(const NameValuePairs& parameters)
11
11
  {
12
- m_stream = NULL;
13
- parameters.GetValue(Name::InputStreamPointer(), m_stream);
14
- m_waiting = false;
12
+ m_stream = NULL;
13
+ parameters.GetValue(Name::InputStreamPointer(), m_stream);
14
+ m_waiting = false;
15
15
  }
16
16
 
17
17
  size_t RubyIOStore::Peek(byte& outByte) const
18
18
  {
19
- if (!m_stream || rb_funcall(*m_stream, rb_intern("eof?"), 0)) {
20
- return 0;
21
- }
22
- else {
23
- return 1;
24
- }
19
+ if (!m_stream || rb_funcall(*m_stream, rb_intern("eof?"), 0)) {
20
+ return 0;
21
+ }
22
+ else {
23
+ return 1;
24
+ }
25
25
  }
26
26
 
27
27
 
28
28
  size_t RubyIOStore::TransferTo2(BufferedTransformation& target, CryptoPP::lword& transferBytes, const std::string& channel, bool blocking)
29
29
  {
30
- if (!m_stream) {
31
- transferBytes = 0;
32
- return 0;
33
- }
30
+ if (!m_stream) {
31
+ transferBytes = 0;
32
+ return 0;
33
+ }
34
34
 
35
- lword size = transferBytes;
36
- transferBytes = 0;
35
+ lword size = transferBytes;
36
+ transferBytes = 0;
37
37
 
38
- if (m_waiting) {
39
- goto output;
40
- }
38
+ if (m_waiting) {
39
+ goto output;
40
+ }
41
41
 
42
- while (size && !RTEST(rb_funcall(*m_stream, rb_intern("eof?"), 0))) {
43
- {
44
- VALUE buffer;
45
- size_t spaceSize = 1024;
46
- m_space = HelpCreatePutSpace(target, channel, 1, UnsignedMin(size_t(0) - 1, size), spaceSize);
42
+ while (size && !RTEST(rb_funcall(*m_stream, rb_intern("eof?"), 0))) {
43
+ {
44
+ VALUE buffer;
45
+ size_t spaceSize = 1024;
46
+ m_space = HelpCreatePutSpace(target, channel, 1, UnsignedMin(size_t(0) - 1, size), spaceSize);
47
47
 
48
- buffer = rb_funcall(*m_stream, rb_intern("read"), 1, UINT2NUM(STDMIN(size, (lword) spaceSize)));
49
- if (TYPE(buffer) != T_STRING) {
50
- throw ReadErr();
51
- }
52
- memcpy(m_space, StringValuePtr(buffer), RSTRING(buffer)->len);
53
- m_len = RSTRING(buffer)->len;
54
- }
55
- size_t blockedBytes;
56
- output:
57
- blockedBytes = target.ChannelPutModifiable2(channel, m_space, m_len, 0, blocking);
58
- m_waiting = blockedBytes > 0;
59
- if (m_waiting) {
60
- return blockedBytes;
61
- }
62
- size -= m_len;
63
- transferBytes += m_len;
64
- }
65
- if (!RTEST(rb_funcall(*m_stream, rb_intern("eof?"), 0))) {
66
- throw ReadErr();
67
- }
68
- return 0;
48
+ buffer = rb_funcall(*m_stream, rb_intern("read"), 1, UINT2NUM(STDMIN(size, (lword) spaceSize)));
49
+ if (TYPE(buffer) != T_STRING) {
50
+ throw ReadErr();
51
+ }
52
+ memcpy(m_space, StringValuePtr(buffer), RSTRING_LEN(buffer));
53
+ m_len = RSTRING_LEN(buffer);
54
+ }
55
+ size_t blockedBytes;
56
+ output:
57
+ blockedBytes = target.ChannelPutModifiable2(channel, m_space, m_len, 0, blocking);
58
+ m_waiting = blockedBytes > 0;
59
+ if (m_waiting) {
60
+ return blockedBytes;
61
+ }
62
+ size -= m_len;
63
+ transferBytes += m_len;
64
+ }
65
+ if (!RTEST(rb_funcall(*m_stream, rb_intern("eof?"), 0))) {
66
+ throw ReadErr();
67
+ }
68
+ return 0;
69
69
  }
70
70
 
71
71
  void RubyIOSink::IsolatedInitialize(const NameValuePairs& parameters)
72
72
  {
73
- m_stream = NULL;
74
- parameters.GetValue(Name::OutputStreamPointer(), m_stream);
73
+ m_stream = NULL;
74
+ parameters.GetValue(Name::OutputStreamPointer(), m_stream);
75
75
  }
76
76
 
77
77
  size_t RubyIOSink::Put2(const byte* inString, size_t length, int messageEnd, bool blocking)
78
78
  {
79
- if (!m_stream) {
80
- throw Err("RubyIOSink: output stream not opened");
81
- }
79
+ if (!m_stream) {
80
+ throw Err("RubyIOSink: output stream not opened");
81
+ }
82
82
 
83
- rb_funcall(*m_stream, rb_intern("write"), 1, rb_str_new((const char*) inString, length));
83
+ rb_funcall(*m_stream, rb_intern("write"), 1, rb_str_new((const char*) inString, length));
84
84
 
85
- if (messageEnd) {
86
- rb_funcall(*m_stream, rb_intern("flush"), 0);
87
- }
85
+ if (messageEnd) {
86
+ rb_funcall(*m_stream, rb_intern("flush"), 0);
87
+ }
88
88
 
89
- return 0;
89
+ return 0;
90
90
  }
@@ -1,8 +1,8 @@
1
1
 
2
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
3
+ * Copyright (c) 2002-2014 J Smith <dark.panda@gmail.com>
4
+ * Crypto++ copyright (c) 1995-2013 Wei Dai
5
+ * See MIT-LICENSE for the extact license
6
6
  */
7
7
 
8
8
  #ifndef __JSINK_H__
@@ -13,142 +13,146 @@
13
13
 
14
14
  extern "C" {
15
15
  #include "ruby.h"
16
+
17
+ #if defined(RUBY_VERSION_CODE) && RUBY_VERSION_CODE >= 190
18
+ #include "ruby/io.h"
19
+ #else
16
20
  #include "rubyio.h"
21
+ #endif
17
22
  }
18
23
 
19
24
  using namespace CryptoPP;
20
25
 
21
26
  class RubyIOStore : public Store, private FilterPutSpaceHelper
22
27
  {
23
- public:
24
- class Err : public Exception
25
- {
26
- public:
27
- Err(const std::string& s) : Exception(IO_ERROR, s) {}
28
- };
29
-
30
- class OpenErr : public Err
31
- {
32
- public:
33
- OpenErr(const std::string& filename) : Err("RubyIOStore: error opening IO stream for reading: " + filename) {}
34
- };
35
-
36
- class ReadErr : public Err
37
- {
38
- public:
39
- ReadErr() : Err("RubyIOStore: error reading IO stream") {}
40
- };
41
-
42
- RubyIOStore() {}
43
-
44
- RubyIOStore(VALUE** in)
45
- {
46
- StoreInitialize(MakeParameters(Name::InputStreamPointer(), *in));
47
- }
48
-
49
- RubyIOStore(const char* filename)
50
- {
51
- StoreInitialize(MakeParameters(Name::InputFileName(), filename));
52
- }
53
-
54
- VALUE* GetStream()
55
- {
56
- return m_stream;
57
- }
58
-
59
- size_t Peek(byte &outByte) const;
60
- size_t TransferTo2(BufferedTransformation &target, CryptoPP::lword &transferBytes, const std::string &channel = NULL_CHANNEL, bool blocking = true);
61
-
62
- // These methods aren't actually used in the PHP extension, but we need to implement them anyway
63
- // because they're abstract...
64
- size_t CopyRangeTo2(BufferedTransformation& target, CryptoPP::lword& begin, CryptoPP::lword end = ULONG_MAX, const std::string& channel = NULL_CHANNEL, bool blocking = true) const { return 0; }
65
- CryptoPP::lword MaxRetrievable() const { return 0L; }
66
-
67
- private:
68
- void StoreInitialize(const NameValuePairs &parameters);
69
- VALUE* m_stream;
70
-
71
- byte* m_space;
72
- unsigned int m_len;
73
- bool m_waiting;
28
+ public:
29
+ class Err : public Exception
30
+ {
31
+ public:
32
+ Err(const std::string& s) : Exception(IO_ERROR, s) {}
33
+ };
34
+
35
+ class OpenErr : public Err
36
+ {
37
+ public:
38
+ OpenErr(const std::string& filename) : Err("RubyIOStore: error opening IO stream for reading: " + filename) {}
39
+ };
40
+
41
+ class ReadErr : public Err
42
+ {
43
+ public:
44
+ ReadErr() : Err("RubyIOStore: error reading IO stream") {}
45
+ };
46
+
47
+ RubyIOStore() {}
48
+
49
+ RubyIOStore(VALUE** in)
50
+ {
51
+ StoreInitialize(MakeParameters(Name::InputStreamPointer(), *in));
52
+ }
53
+
54
+ RubyIOStore(const char* filename)
55
+ {
56
+ StoreInitialize(MakeParameters(Name::InputFileName(), filename));
57
+ }
58
+
59
+ VALUE* GetStream()
60
+ {
61
+ return m_stream;
62
+ }
63
+
64
+ size_t Peek(byte &outByte) const;
65
+ size_t TransferTo2(BufferedTransformation &target, CryptoPP::lword &transferBytes, const std::string &channel = NULL_CHANNEL, bool blocking = true);
66
+
67
+ // These abstract methods are purposely no-ops here...
68
+ size_t CopyRangeTo2(BufferedTransformation& target, CryptoPP::lword& begin, CryptoPP::lword end = ULONG_MAX, const std::string& channel = NULL_CHANNEL, bool blocking = true) const { return 0; }
69
+ CryptoPP::lword MaxRetrievable() const { return 0L; }
70
+
71
+ private:
72
+ void StoreInitialize(const NameValuePairs &parameters);
73
+ VALUE* m_stream;
74
+
75
+ byte* m_space;
76
+ unsigned int m_len;
77
+ bool m_waiting;
74
78
  };
75
79
 
76
80
  class RubyIOSource : public SourceTemplate<RubyIOStore>
77
81
  {
78
- public:
79
- typedef RubyIOStore::Err Err;
80
- typedef RubyIOStore::OpenErr OpenErr;
81
- typedef RubyIOStore::ReadErr ReadErr;
82
-
83
- RubyIOSource(BufferedTransformation* attachment = NULL) : SourceTemplate<RubyIOStore>(attachment) {}
84
-
85
- RubyIOSource(VALUE** in, bool pumpAll, BufferedTransformation* attachment = NULL) : SourceTemplate<RubyIOStore>(attachment)
86
- {
87
- SourceInitialize(pumpAll, MakeParameters(Name::InputStreamPointer(), *in));
88
- }
89
-
90
- RubyIOSource(const char* filename, bool pumpAll, BufferedTransformation* attachment = NULL, bool binary = true) : SourceTemplate<RubyIOStore>(attachment)
91
- {
92
- SourceInitialize(pumpAll, MakeParameters(Name::InputFileName(), filename)(Name::InputBinaryMode(), binary));
93
- }
94
-
95
- VALUE* GetStream()
96
- {
97
- return m_store.GetStream();
98
- }
82
+ public:
83
+ typedef RubyIOStore::Err Err;
84
+ typedef RubyIOStore::OpenErr OpenErr;
85
+ typedef RubyIOStore::ReadErr ReadErr;
86
+
87
+ RubyIOSource(BufferedTransformation* attachment = NULL) : SourceTemplate<RubyIOStore>(attachment) {}
88
+
89
+ RubyIOSource(VALUE** in, bool pumpAll, BufferedTransformation* attachment = NULL) : SourceTemplate<RubyIOStore>(attachment)
90
+ {
91
+ SourceInitialize(pumpAll, MakeParameters(Name::InputStreamPointer(), *in));
92
+ }
93
+
94
+ RubyIOSource(const char* filename, bool pumpAll, BufferedTransformation* attachment = NULL, bool binary = true) : SourceTemplate<RubyIOStore>(attachment)
95
+ {
96
+ SourceInitialize(pumpAll, MakeParameters(Name::InputFileName(), filename)(Name::InputBinaryMode(), binary));
97
+ }
98
+
99
+ VALUE* GetStream()
100
+ {
101
+ return m_store.GetStream();
102
+ }
99
103
  };
100
104
 
101
105
 
102
106
  class RubyIOSink : public Sink
103
107
  {
104
- public:
105
- class Err : public Exception
106
- {
107
- public:
108
- Err(const std::string& s) : Exception(IO_ERROR, s) {}
109
- };
110
-
111
- class OpenErr : public Err
112
- {
113
- public:
114
- OpenErr(const std::string &filename) : Err("RubyIOSink: error opening file for writing: " + filename) {}
115
- };
116
-
117
- class WriteErr : public Err
118
- {
119
- public:
120
- WriteErr() : Err("RubyIOSink: error writing file") {}
121
- };
122
-
123
- RubyIOSink()
124
- {
125
- m_stream = NULL;
126
- }
127
-
128
- RubyIOSink(VALUE** out)
129
- {
130
- IsolatedInitialize(MakeParameters(Name::OutputStreamPointer(), *out));
131
- }
132
-
133
- RubyIOSink(const char* filename, bool binary = true)
134
- {
135
- IsolatedInitialize(MakeParameters(Name::OutputFileName(), filename)(Name::OutputBinaryMode(), binary));
136
- }
137
-
138
- VALUE* GetStream()
139
- {
140
- return m_stream;
141
- }
142
-
143
- void IsolatedInitialize(const NameValuePairs& parameters);
144
- size_t Put2(const byte* inString, size_t length, int messageEnd, bool blocking);
145
-
146
- // IsolatedFlush isn't actually used, but needs to be implemented because
147
- // it's abstract...
148
- bool IsolatedFlush(bool hardFlush, bool blocking) { return false; };
149
-
150
- private:
151
- VALUE* m_stream;
108
+ public:
109
+ class Err : public Exception
110
+ {
111
+ public:
112
+ Err(const std::string& s) : Exception(IO_ERROR, s) {}
113
+ };
114
+
115
+ class OpenErr : public Err
116
+ {
117
+ public:
118
+ OpenErr(const std::string &filename) : Err("RubyIOSink: error opening file for writing: " + filename) {}
119
+ };
120
+
121
+ class WriteErr : public Err
122
+ {
123
+ public:
124
+ WriteErr() : Err("RubyIOSink: error writing file") {}
125
+ };
126
+
127
+ RubyIOSink()
128
+ {
129
+ m_stream = NULL;
130
+ }
131
+
132
+ RubyIOSink(VALUE** out)
133
+ {
134
+ IsolatedInitialize(MakeParameters(Name::OutputStreamPointer(), *out));
135
+ }
136
+
137
+ RubyIOSink(const char* filename, bool binary = true)
138
+ {
139
+ IsolatedInitialize(MakeParameters(Name::OutputFileName(), filename)(Name::OutputBinaryMode(), binary));
140
+ }
141
+
142
+ VALUE* GetStream()
143
+ {
144
+ return m_stream;
145
+ }
146
+
147
+ void IsolatedInitialize(const NameValuePairs& parameters);
148
+ size_t Put2(const byte* inString, size_t length, int messageEnd, bool blocking);
149
+
150
+ // IsolatedFlush isn't actually used, but needs to be implemented because
151
+ // it's abstract...
152
+ bool IsolatedFlush(bool hardFlush, bool blocking) { return false; };
153
+
154
+ private:
155
+ VALUE* m_stream;
152
156
  };
153
157
 
154
158
  #endif