プロジェクト

全般

プロフィール

バグ #1585 » 1585-use-own-blowfish-impl.patch

Osamu Koga, 2023-10-05 20:56

差分を表示:

plugin/world/blowfish_ecb/LICENSE.txt
1

  
2
                                 Apache License
3
                           Version 2.0, January 2004
4
                        https://www.apache.org/licenses/
5

  
6
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7

  
8
   1. Definitions.
9

  
10
      "License" shall mean the terms and conditions for use, reproduction,
11
      and distribution as defined by Sections 1 through 9 of this document.
12

  
13
      "Licensor" shall mean the copyright owner or entity authorized by
14
      the copyright owner that is granting the License.
15

  
16
      "Legal Entity" shall mean the union of the acting entity and all
17
      other entities that control, are controlled by, or are under common
18
      control with that entity. For the purposes of this definition,
19
      "control" means (i) the power, direct or indirect, to cause the
20
      direction or management of such entity, whether by contract or
21
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
      outstanding shares, or (iii) beneficial ownership of such entity.
23

  
24
      "You" (or "Your") shall mean an individual or Legal Entity
25
      exercising permissions granted by this License.
26

  
27
      "Source" form shall mean the preferred form for making modifications,
28
      including but not limited to software source code, documentation
29
      source, and configuration files.
30

  
31
      "Object" form shall mean any form resulting from mechanical
32
      transformation or translation of a Source form, including but
33
      not limited to compiled object code, generated documentation,
34
      and conversions to other media types.
35

  
36
      "Work" shall mean the work of authorship, whether in Source or
37
      Object form, made available under the License, as indicated by a
38
      copyright notice that is included in or attached to the work
39
      (an example is provided in the Appendix below).
40

  
41
      "Derivative Works" shall mean any work, whether in Source or Object
42
      form, that is based on (or derived from) the Work and for which the
43
      editorial revisions, annotations, elaborations, or other modifications
44
      represent, as a whole, an original work of authorship. For the purposes
45
      of this License, Derivative Works shall not include works that remain
46
      separable from, or merely link (or bind by name) to the interfaces of,
47
      the Work and Derivative Works thereof.
48

  
49
      "Contribution" shall mean any work of authorship, including
50
      the original version of the Work and any modifications or additions
51
      to that Work or Derivative Works thereof, that is intentionally
52
      submitted to Licensor for inclusion in the Work by the copyright owner
53
      or by an individual or Legal Entity authorized to submit on behalf of
54
      the copyright owner. For the purposes of this definition, "submitted"
55
      means any form of electronic, verbal, or written communication sent
56
      to the Licensor or its representatives, including but not limited to
57
      communication on electronic mailing lists, source code control systems,
58
      and issue tracking systems that are managed by, or on behalf of, the
59
      Licensor for the purpose of discussing and improving the Work, but
60
      excluding communication that is conspicuously marked or otherwise
61
      designated in writing by the copyright owner as "Not a Contribution."
62

  
63
      "Contributor" shall mean Licensor and any individual or Legal Entity
64
      on behalf of whom a Contribution has been received by Licensor and
65
      subsequently incorporated within the Work.
66

  
67
   2. Grant of Copyright License. Subject to the terms and conditions of
68
      this License, each Contributor hereby grants to You a perpetual,
69
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
      copyright license to reproduce, prepare Derivative Works of,
71
      publicly display, publicly perform, sublicense, and distribute the
72
      Work and such Derivative Works in Source or Object form.
73

  
74
   3. Grant of Patent License. Subject to the terms and conditions of
75
      this License, each Contributor hereby grants to You a perpetual,
76
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
      (except as stated in this section) patent license to make, have made,
78
      use, offer to sell, sell, import, and otherwise transfer the Work,
79
      where such license applies only to those patent claims licensable
80
      by such Contributor that are necessarily infringed by their
81
      Contribution(s) alone or by combination of their Contribution(s)
82
      with the Work to which such Contribution(s) was submitted. If You
83
      institute patent litigation against any entity (including a
84
      cross-claim or counterclaim in a lawsuit) alleging that the Work
85
      or a Contribution incorporated within the Work constitutes direct
86
      or contributory patent infringement, then any patent licenses
87
      granted to You under this License for that Work shall terminate
88
      as of the date such litigation is filed.
89

  
90
   4. Redistribution. You may reproduce and distribute copies of the
91
      Work or Derivative Works thereof in any medium, with or without
92
      modifications, and in Source or Object form, provided that You
93
      meet the following conditions:
94

  
95
      (a) You must give any other recipients of the Work or
96
          Derivative Works a copy of this License; and
97

  
98
      (b) You must cause any modified files to carry prominent notices
99
          stating that You changed the files; and
100

  
101
      (c) You must retain, in the Source form of any Derivative Works
102
          that You distribute, all copyright, patent, trademark, and
103
          attribution notices from the Source form of the Work,
104
          excluding those notices that do not pertain to any part of
105
          the Derivative Works; and
106

  
107
      (d) If the Work includes a "NOTICE" text file as part of its
108
          distribution, then any Derivative Works that You distribute must
109
          include a readable copy of the attribution notices contained
110
          within such NOTICE file, excluding those notices that do not
111
          pertain to any part of the Derivative Works, in at least one
112
          of the following places: within a NOTICE text file distributed
113
          as part of the Derivative Works; within the Source form or
114
          documentation, if provided along with the Derivative Works; or,
115
          within a display generated by the Derivative Works, if and
116
          wherever such third-party notices normally appear. The contents
117
          of the NOTICE file are for informational purposes only and
118
          do not modify the License. You may add Your own attribution
119
          notices within Derivative Works that You distribute, alongside
120
          or as an addendum to the NOTICE text from the Work, provided
121
          that such additional attribution notices cannot be construed
122
          as modifying the License.
123

  
124
      You may add Your own copyright statement to Your modifications and
125
      may provide additional or different license terms and conditions
126
      for use, reproduction, or distribution of Your modifications, or
127
      for any such Derivative Works as a whole, provided Your use,
128
      reproduction, and distribution of the Work otherwise complies with
129
      the conditions stated in this License.
130

  
131
   5. Submission of Contributions. Unless You explicitly state otherwise,
132
      any Contribution intentionally submitted for inclusion in the Work
133
      by You to the Licensor shall be under the terms and conditions of
134
      this License, without any additional terms or conditions.
135
      Notwithstanding the above, nothing herein shall supersede or modify
136
      the terms of any separate license agreement you may have executed
137
      with Licensor regarding such Contributions.
138

  
139
   6. Trademarks. This License does not grant permission to use the trade
140
      names, trademarks, service marks, or product names of the Licensor,
141
      except as required for reasonable and customary use in describing the
142
      origin of the Work and reproducing the content of the NOTICE file.
143

  
144
   7. Disclaimer of Warranty. Unless required by applicable law or
145
      agreed to in writing, Licensor provides the Work (and each
146
      Contributor provides its Contributions) on an "AS IS" BASIS,
147
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
      implied, including, without limitation, any warranties or conditions
149
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
      PARTICULAR PURPOSE. You are solely responsible for determining the
151
      appropriateness of using or redistributing the Work and assume any
152
      risks associated with Your exercise of permissions under this License.
153

  
154
   8. Limitation of Liability. In no event and under no legal theory,
155
      whether in tort (including negligence), contract, or otherwise,
156
      unless required by applicable law (such as deliberate and grossly
157
      negligent acts) or agreed to in writing, shall any Contributor be
158
      liable to You for damages, including any direct, indirect, special,
159
      incidental, or consequential damages of any character arising as a
160
      result of this License or out of the use or inability to use the
161
      Work (including but not limited to damages for loss of goodwill,
162
      work stoppage, computer failure or malfunction, or any and all
163
      other commercial damages or losses), even if such Contributor
164
      has been advised of the possibility of such damages.
165

  
166
   9. Accepting Warranty or Additional Liability. While redistributing
167
      the Work or Derivative Works thereof, You may choose to offer,
168
      and charge a fee for, acceptance of support, warranty, indemnity,
169
      or other liability obligations and/or rights consistent with this
170
      License. However, in accepting such obligations, You may act only
171
      on Your own behalf and on Your sole responsibility, not on behalf
172
      of any other Contributor, and only if You agree to indemnify,
173
      defend, and hold each Contributor harmless for any liability
174
      incurred by, or claims asserted against, such Contributor by reason
175
      of your accepting any such warranty or additional liability.
176

  
177
   END OF TERMS AND CONDITIONS
plugin/world/blowfish_ecb/README.md
1
# Blowfish-ECB
2

  
3
Port of OpenSSL's Blowfish implementation for Ruby.
4

  
5
Created to workaround an issue of Ruby which prevents using deprecated OpenSSL APIs, including the Blowfish algorithm.
6

  
7
## Copyrights
8
Copyright (c) 1998-2023 The OpenSSL Project Authors
9

  
10
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
plugin/world/blowfish_ecb/blowfish_ecb.rb
1
module Blowfish
2
  module ECB
3
  end
4
end
5

  
6
require_relative 'lib/cipher'
plugin/world/blowfish_ecb/lib/cipher.rb
1
require_relative 'ecb'
2
require_relative 'key'
3

  
4
module Blowfish::ECB
5
  class Cipher
6
    # call-seq:
7
    #   Blowfish::ECB::Cipher.new(string) -> Cipher
8
    #
9
    # Creates a Cipher instance with given key.
10
    def initialize(key)
11
      @key = Blowfish::ECB::Key.new(key)
12
    end
13

  
14
    # call-seq:
15
    #   cipher.encrypt(string) -> string
16
    #
17
    # Encrypts given data.
18
    def encrypt(data)
19
      bytes = data.unpack("C*")
20
      pad_len = 8 - (bytes.size % 8)
21
      bytes.push(*([pad_len] * pad_len))
22
      Blowfish::ECB.encrypt(bytes.pack("C*"), @key)
23
    end
24

  
25
    # call-seq:
26
    #   cipher.decrypt(string) -> string
27
    #
28
    # Decrypts given data. The data must be in ASCII-8BIT encoding, since the
29
    # encrypted data consists of arbitrary bytes. It is a sign of a bug if the
30
    # encrypted data is encoded as if it was a human-readable text.
31
    def decrypt(data)
32
      if data.encoding != Encoding::ASCII_8BIT
33
        raise "data.encoding must be ASCII-8BIT, but got: #{data.encoding}"
34
      end
35

  
36
      decoded = Blowfish::ECB.decrypt(data, @key)
37

  
38
      # Last byte indicates the size of padding.
39
      # Strip the padding from res accordingly.
40
      pad_len = decoded[-1].unpack("C")[0]
41
      decoded[0...-pad_len]
42
    end
43
  end
44
end
plugin/world/blowfish_ecb/lib/common.rb
1
module Blowfish::ECB::Common
2
  class << self
3
    # call-seq:
4
    #   encrypt(l, r, Key) -> [int, int]
5
    #
6
    # Encrypts pseudo-64bit-value (l, r) into bytes using given key.
7
    # Both l and r must be 32-bit integers.
8
    # Original: https://github.com/openssl/openssl/blob/e8e2b131ca253f9e28c511c8294e27ddbd0b60c6/crypto/bf/bf_enc.c#L30
9
    #
10
    # Note that unlike the original implementation, this method returns a new tuple representing the result
11
    # rather than destructively updating the input argument. 
12
    def encrypt(l, r, key)
13
      l ^= key.p[0]
14
      r = bf_enc(r, l, key.s, key.p[1])
15
      l = bf_enc(l, r, key.s, key.p[2])
16
      r = bf_enc(r, l, key.s, key.p[3])
17
      l = bf_enc(l, r, key.s, key.p[4])
18
      r = bf_enc(r, l, key.s, key.p[5])
19
      l = bf_enc(l, r, key.s, key.p[6])
20
      r = bf_enc(r, l, key.s, key.p[7])
21
      l = bf_enc(l, r, key.s, key.p[8])
22
      r = bf_enc(r, l, key.s, key.p[9])
23
      l = bf_enc(l, r, key.s, key.p[10])
24
      r = bf_enc(r, l, key.s, key.p[11])
25
      l = bf_enc(l, r, key.s, key.p[12])
26
      r = bf_enc(r, l, key.s, key.p[13])
27
      l = bf_enc(l, r, key.s, key.p[14])
28
      r = bf_enc(r, l, key.s, key.p[15])
29
      l = bf_enc(l, r, key.s, key.p[16])
30
      r ^= key.p[17]
31

  
32
      [r & 0xffffffff, l & 0xffffffff]
33
    end
34

  
35
    # call-seq:
36
    #   decrypt(l, r, Key) -> [int, int]
37
    #
38
    # Decrypts pseudo-64bit-value (l, r) into bytes using given key.
39
    # Both l and r must be 32-bit integers.
40
    # Original: https://github.com/openssl/openssl/blob/e8e2b131ca253f9e28c511c8294e27ddbd0b60c6/crypto/bf/bf_enc.c#L69
41
    #
42
    # Note that unlike the original implementation, this method returns a new tuple representing the result
43
    # rather than destructively updating the input argument. 
44
    def decrypt(l, r, key)
45
      l ^= key.p[17]
46
      r = bf_enc(r, l, key.s, key.p[16])
47
      l = bf_enc(l, r, key.s, key.p[15])
48
      r = bf_enc(r, l, key.s, key.p[14])
49
      l = bf_enc(l, r, key.s, key.p[13])
50
      r = bf_enc(r, l, key.s, key.p[12])
51
      l = bf_enc(l, r, key.s, key.p[11])
52
      r = bf_enc(r, l, key.s, key.p[10])
53
      l = bf_enc(l, r, key.s, key.p[9])
54
      r = bf_enc(r, l, key.s, key.p[8])
55
      l = bf_enc(l, r, key.s, key.p[7])
56
      r = bf_enc(r, l, key.s, key.p[6])
57
      l = bf_enc(l, r, key.s, key.p[5])
58
      r = bf_enc(r, l, key.s, key.p[4])
59
      l = bf_enc(l, r, key.s, key.p[3])
60
      r = bf_enc(r, l, key.s, key.p[2])
61
      l = bf_enc(l, r, key.s, key.p[1])
62
      r ^= key.p[0]
63

  
64
      [r & 0xffffffff, l & 0xffffffff]
65
    end
66

  
67
    private
68

  
69
    # call-seq:
70
    #    bf_enc(int, int, [int], int) -> int
71
    #
72
    # Calculates one step of the Blowfish encryption.
73
    # Original: https://github.com/openssl/openssl/blob/e8e2b131ca253f9e28c511c8294e27ddbd0b60c6/crypto/bf/bf_local.h#L76
74
    #
75
    # Note that due to limitation in Ruby, unlike what the original BF_ENC is doing,
76
    # this method returns the calculated value rather than destructively reassigning l.
77
    def bf_enc(l, r, s, p)
78
      tmp =  s[0x0000+((r>>24)&0xff)]
79
      tmp += s[0x0100+((r>>16)&0xff)]
80
      tmp ^= s[0x0200+((r>> 8)&0xff)]
81
      tmp += s[0x0300+((r    )&0xff)]
82
      l ^ p ^ (tmp & 0xffffffff)
83
    end
84
  end
85
end
plugin/world/blowfish_ecb/lib/ecb.rb
1
module Blowfish::ECB
2
  class << self
3
    # call-seq:
4
    #   Blowfish::ECB.encrypt(string, Key) -> string
5
    #
6
    # Encrypts the data (as in byte sequence) with given key.
7
    # Since the data is a byte sequence, its encoding must be ASCII-8BIT. 
8
    def encrypt(data, key)
9
      if data.size % 8 != 0
10
        raise "data size must be multiple of 8, but got: #{data.size}"
11
      end
12

  
13
      res = ""
14
      0.step(data.size - 1, 8).each do |i|
15
        l, r = data.byteslice(i, 8).unpack("I>I>")
16
        res += Common.encrypt(l, r, key).pack("I>I>")
17
      end
18
      res
19
    end
20

  
21
    # call-seq:
22
    #   Blowfish::ECB.decrypt(string, Key) -> string
23
    #
24
    # Decrypts the data (as in byte sequence) with given key.
25
    # Since the data is a byte sequence, its encoding must be ASCII-8BIT. 
26
    def decrypt(data, key)
27
      if data.encoding != Encoding::ASCII_8BIT
28
        raise "data.encoding must be ASCII-8BIT, but got: #{data.encoding}"
29
      end
30
      if data.size % 8 != 0
31
        raise "data size must be multiple of 8, but got: #{data.size}"
32
      end
33

  
34
      res = ""
35
      0.step(data.size - 1, 8).each do |i|
36
        l, r = data.byteslice(i, 8).unpack("I>I>")
37
        res += Common.decrypt(l, r, key).pack("I>I>")
38
      end
39
      res
40
    end
41
  end
42
end
plugin/world/blowfish_ecb/lib/key.rb
1
require_relative 'common'
2

  
3
module Blowfish::ECB
4
  class Key
5
    attr_reader :p, :s
6

  
7
    # call-seq:
8
    #   Blowfish::ECB::Key.new(string) -> Key
9
    #
10
    # Returns a Blowfish key object initialized with the given key.
11
    # Original: https://github.com/openssl/openssl/blob/456e6ca5d73972cdb4228e6c5ec9acdf19237308/crypto/bf/bf_skey.c
12
    def initialize(key)
13
      @p = [
14
        0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,
15
        0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,
16
        0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
17
        0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,
18
        0x9216d5d9, 0x8979fb1b
19
      ]
20
      @s = [
21
        0xd1310ba6, 0x98dfb5ac, 0x2ffd72db,
22
        0xd01adfb7,
23
        0xb8e1afed, 0x6a267e96, 0xba7c9045,
24
        0xf12c7f99,
25
        0x24a19947, 0xb3916cf7, 0x0801f2e2,
26
        0x858efc16,
27
        0x636920d8, 0x71574e69, 0xa458fea3,
28
        0xf4933d7e,
29
        0x0d95748f, 0x728eb658, 0x718bcd58,
30
        0x82154aee,
31
        0x7b54a41d, 0xc25a59b5, 0x9c30d539,
32
        0x2af26013,
33
        0xc5d1b023, 0x286085f0, 0xca417918,
34
        0xb8db38ef,
35
        0x8e79dcb0, 0x603a180e, 0x6c9e0e8b,
36
        0xb01e8a3e,
37
        0xd71577c1, 0xbd314b27, 0x78af2fda,
38
        0x55605c60,
39
        0xe65525f3, 0xaa55ab94, 0x57489862,
40
        0x63e81440,
41
        0x55ca396a, 0x2aab10b6, 0xb4cc5c34,
42
        0x1141e8ce,
43
        0xa15486af, 0x7c72e993, 0xb3ee1411,
44
        0x636fbc2a,
45
        0x2ba9c55d, 0x741831f6, 0xce5c3e16,
46
        0x9b87931e,
47
        0xafd6ba33, 0x6c24cf5c, 0x7a325381,
48
        0x28958677,
49
        0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b,
50
        0x66282193,
51
        0x61d809cc, 0xfb21a991, 0x487cac60,
52
        0x5dec8032,
53
        0xef845d5d, 0xe98575b1, 0xdc262302,
54
        0xeb651b88,
55
        0x23893e81, 0xd396acc5, 0x0f6d6ff3,
56
        0x83f44239,
57
        0x2e0b4482, 0xa4842004, 0x69c8f04a,
58
        0x9e1f9b5e,
59
        0x21c66842, 0xf6e96c9a, 0x670c9c61,
60
        0xabd388f0,
61
        0x6a51a0d2, 0xd8542f68, 0x960fa728,
62
        0xab5133a3,
63
        0x6eef0b6c, 0x137a3be4, 0xba3bf050,
64
        0x7efb2a98,
65
        0xa1f1651d, 0x39af0176, 0x66ca593e,
66
        0x82430e88,
67
        0x8cee8619, 0x456f9fb4, 0x7d84a5c3,
68
        0x3b8b5ebe,
69
        0xe06f75d8, 0x85c12073, 0x401a449f,
70
        0x56c16aa6,
71
        0x4ed3aa62, 0x363f7706, 0x1bfedf72,
72
        0x429b023d,
73
        0x37d0d724, 0xd00a1248, 0xdb0fead3,
74
        0x49f1c09b,
75
        0x075372c9, 0x80991b7b, 0x25d479d8,
76
        0xf6e8def7,
77
        0xe3fe501a, 0xb6794c3b, 0x976ce0bd,
78
        0x04c006ba,
79
        0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2,
80
        0x196a2463,
81
        0x68fb6faf, 0x3e6c53b5, 0x1339b2eb,
82
        0x3b52ec6f,
83
        0x6dfc511f, 0x9b30952c, 0xcc814544,
84
        0xaf5ebd09,
85
        0xbee3d004, 0xde334afd, 0x660f2807,
86
        0x192e4bb3,
87
        0xc0cba857, 0x45c8740f, 0xd20b5f39,
88
        0xb9d3fbdb,
89
        0x5579c0bd, 0x1a60320a, 0xd6a100c6,
90
        0x402c7279,
91
        0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8,
92
        0xdb3222f8,
93
        0x3c7516df, 0xfd616b15, 0x2f501ec8,
94
        0xad0552ab,
95
        0x323db5fa, 0xfd238760, 0x53317b48,
96
        0x3e00df82,
97
        0x9e5c57bb, 0xca6f8ca0, 0x1a87562e,
98
        0xdf1769db,
99
        0xd542a8f6, 0x287effc3, 0xac6732c6,
100
        0x8c4f5573,
101
        0x695b27b0, 0xbbca58c8, 0xe1ffa35d,
102
        0xb8f011a0,
103
        0x10fa3d98, 0xfd2183b8, 0x4afcb56c,
104
        0x2dd1d35b,
105
        0x9a53e479, 0xb6f84565, 0xd28e49bc,
106
        0x4bfb9790,
107
        0xe1ddf2da, 0xa4cb7e33, 0x62fb1341,
108
        0xcee4c6e8,
109
        0xef20cada, 0x36774c01, 0xd07e9efe,
110
        0x2bf11fb4,
111
        0x95dbda4d, 0xae909198, 0xeaad8e71,
112
        0x6b93d5a0,
113
        0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f,
114
        0x8e7594b7,
115
        0x8ff6e2fb, 0xf2122b64, 0x8888b812,
116
        0x900df01c,
117
        0x4fad5ea0, 0x688fc31c, 0xd1cff191,
118
        0xb3a8c1ad,
119
        0x2f2f2218, 0xbe0e1777, 0xea752dfe,
120
        0x8b021fa1,
121
        0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6,
122
        0xce89e299,
123
        0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81,
124
        0xd2ada8d9,
125
        0x165fa266, 0x80957705, 0x93cc7314,
126
        0x211a1477,
127
        0xe6ad2065, 0x77b5fa86, 0xc75442f5,
128
        0xfb9d35cf,
129
        0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3,
130
        0xae1e7e49,
131
        0x00250e2d, 0x2071b35e, 0x226800bb,
132
        0x57b8e0af,
133
        0x2464369b, 0xf009b91e, 0x5563911d,
134
        0x59dfa6aa,
135
        0x78c14389, 0xd95a537f, 0x207d5ba2,
136
        0x02e5b9c5,
137
        0x83260376, 0x6295cfa9, 0x11c81968,
138
        0x4e734a41,
139
        0xb3472dca, 0x7b14a94a, 0x1b510052,
140
        0x9a532915,
141
        0xd60f573f, 0xbc9bc6e4, 0x2b60a476,
142
        0x81e67400,
143
        0x08ba6fb5, 0x571be91f, 0xf296ec6b,
144
        0x2a0dd915,
145
        0xb6636521, 0xe7b9f9b6, 0xff34052e,
146
        0xc5855664,
147
        0x53b02d5d, 0xa99f8fa1, 0x08ba4799,
148
        0x6e85076a,
149
        0x4b7a70e9, 0xb5b32944, 0xdb75092e,
150
        0xc4192623,
151
        0xad6ea6b0, 0x49a7df7d, 0x9cee60b8,
152
        0x8fedb266,
153
        0xecaa8c71, 0x699a17ff, 0x5664526c,
154
        0xc2b19ee1,
155
        0x193602a5, 0x75094c29, 0xa0591340,
156
        0xe4183a3e,
157
        0x3f54989a, 0x5b429d65, 0x6b8fe4d6,
158
        0x99f73fd6,
159
        0xa1d29c07, 0xefe830f5, 0x4d2d38e6,
160
        0xf0255dc1,
161
        0x4cdd2086, 0x8470eb26, 0x6382e9c6,
162
        0x021ecc5e,
163
        0x09686b3f, 0x3ebaefc9, 0x3c971814,
164
        0x6b6a70a1,
165
        0x687f3584, 0x52a0e286, 0xb79c5305,
166
        0xaa500737,
167
        0x3e07841c, 0x7fdeae5c, 0x8e7d44ec,
168
        0x5716f2b8,
169
        0xb03ada37, 0xf0500c0d, 0xf01c1f04,
170
        0x0200b3ff,
171
        0xae0cf51a, 0x3cb574b2, 0x25837a58,
172
        0xdc0921bd,
173
        0xd19113f9, 0x7ca92ff6, 0x94324773,
174
        0x22f54701,
175
        0x3ae5e581, 0x37c2dadc, 0xc8b57634,
176
        0x9af3dda7,
177
        0xa9446146, 0x0fd0030e, 0xecc8c73e,
178
        0xa4751e41,
179
        0xe238cd99, 0x3bea0e2f, 0x3280bba1,
180
        0x183eb331,
181
        0x4e548b38, 0x4f6db908, 0x6f420d03,
182
        0xf60a04bf,
183
        0x2cb81290, 0x24977c79, 0x5679b072,
184
        0xbcaf89af,
185
        0xde9a771f, 0xd9930810, 0xb38bae12,
186
        0xdccf3f2e,
187
        0x5512721f, 0x2e6b7124, 0x501adde6,
188
        0x9f84cd87,
189
        0x7a584718, 0x7408da17, 0xbc9f9abc,
190
        0xe94b7d8c,
191
        0xec7aec3a, 0xdb851dfa, 0x63094366,
192
        0xc464c3d2,
193
        0xef1c1847, 0x3215d908, 0xdd433b37,
194
        0x24c2ba16,
195
        0x12a14d43, 0x2a65c451, 0x50940002,
196
        0x133ae4dd,
197
        0x71dff89e, 0x10314e55, 0x81ac77d6,
198
        0x5f11199b,
199
        0x043556f1, 0xd7a3c76b, 0x3c11183b,
200
        0x5924a509,
201
        0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c,
202
        0x1e153c6e,
203
        0x86e34570, 0xeae96fb1, 0x860e5e0a,
204
        0x5a3e2ab3,
205
        0x771fe71c, 0x4e3d06fa, 0x2965dcb9,
206
        0x99e71d0f,
207
        0x803e89d6, 0x5266c825, 0x2e4cc978,
208
        0x9c10b36a,
209
        0xc6150eba, 0x94e2ea78, 0xa5fc3c53,
210
        0x1e0a2df4,
211
        0xf2f74ea7, 0x361d2b3d, 0x1939260f,
212
        0x19c27960,
213
        0x5223a708, 0xf71312b6, 0xebadfe6e,
214
        0xeac31f66,
215
        0xe3bc4595, 0xa67bc883, 0xb17f37d1,
216
        0x018cff28,
217
        0xc332ddef, 0xbe6c5aa5, 0x65582185,
218
        0x68ab9802,
219
        0xeecea50f, 0xdb2f953b, 0x2aef7dad,
220
        0x5b6e2f84,
221
        0x1521b628, 0x29076170, 0xecdd4775,
222
        0x619f1510,
223
        0x13cca830, 0xeb61bd96, 0x0334fe1e,
224
        0xaa0363cf,
225
        0xb5735c90, 0x4c70a239, 0xd59e9e0b,
226
        0xcbaade14,
227
        0xeecc86bc, 0x60622ca7, 0x9cab5cab,
228
        0xb2f3846e,
229
        0x648b1eaf, 0x19bdf0ca, 0xa02369b9,
230
        0x655abb50,
231
        0x40685a32, 0x3c2ab4b3, 0x319ee9d5,
232
        0xc021b8f7,
233
        0x9b540b19, 0x875fa099, 0x95f7997e,
234
        0x623d7da8,
235
        0xf837889a, 0x97e32d77, 0x11ed935f,
236
        0x16681281,
237
        0x0e358829, 0xc7e61fd6, 0x96dedfa1,
238
        0x7858ba99,
239
        0x57f584a5, 0x1b227263, 0x9b83c3ff,
240
        0x1ac24696,
241
        0xcdb30aeb, 0x532e3054, 0x8fd948e4,
242
        0x6dbc3128,
243
        0x58ebf2ef, 0x34c6ffea, 0xfe28ed61,
244
        0xee7c3c73,
245
        0x5d4a14d9, 0xe864b7e3, 0x42105d14,
246
        0x203e13e0,
247
        0x45eee2b6, 0xa3aaabea, 0xdb6c4f15,
248
        0xfacb4fd0,
249
        0xc742f442, 0xef6abbb5, 0x654f3b1d,
250
        0x41cd2105,
251
        0xd81e799e, 0x86854dc7, 0xe44b476a,
252
        0x3d816250,
253
        0xcf62a1f2, 0x5b8d2646, 0xfc8883a0,
254
        0xc1c7b6a3,
255
        0x7f1524c3, 0x69cb7492, 0x47848a0b,
256
        0x5692b285,
257
        0x095bbf00, 0xad19489d, 0x1462b174,
258
        0x23820e00,
259
        0x58428d2a, 0x0c55f5ea, 0x1dadf43e,
260
        0x233f7061,
261
        0x3372f092, 0x8d937e41, 0xd65fecf1,
262
        0x6c223bdb,
263
        0x7cde3759, 0xcbee7460, 0x4085f2a7,
264
        0xce77326e,
265
        0xa6078084, 0x19f8509e, 0xe8efd855,
266
        0x61d99735,
267
        0xa969a7aa, 0xc50c06c2, 0x5a04abfc,
268
        0x800bcadc,
269
        0x9e447a2e, 0xc3453484, 0xfdd56705,
270
        0x0e1e9ec9,
271
        0xdb73dbd3, 0x105588cd, 0x675fda79,
272
        0xe3674340,
273
        0xc5c43465, 0x713e38d8, 0x3d28f89e,
274
        0xf16dff20,
275
        0x153e21e7, 0x8fb03d4a, 0xe6e39f2b,
276
        0xdb83adf7,
277
        0xe93d5a68, 0x948140f7, 0xf64c261c,
278
        0x94692934,
279
        0x411520f7, 0x7602d4f7, 0xbcf46b2e,
280
        0xd4a20068,
281
        0xd4082471, 0x3320f46a, 0x43b7d4b7,
282
        0x500061af,
283
        0x1e39f62e, 0x97244546, 0x14214f74,
284
        0xbf8b8840,
285
        0x4d95fc1d, 0x96b591af, 0x70f4ddd3,
286
        0x66a02f45,
287
        0xbfbc09ec, 0x03bd9785, 0x7fac6dd0,
288
        0x31cb8504,
289
        0x96eb27b3, 0x55fd3941, 0xda2547e6,
290
        0xabca0a9a,
291
        0x28507825, 0x530429f4, 0x0a2c86da,
292
        0xe9b66dfb,
293
        0x68dc1462, 0xd7486900, 0x680ec0a4,
294
        0x27a18dee,
295
        0x4f3ffea2, 0xe887ad8c, 0xb58ce006,
296
        0x7af4d6b6,
297
        0xaace1e7c, 0xd3375fec, 0xce78a399,
298
        0x406b2a42,
299
        0x20fe9e35, 0xd9f385b9, 0xee39d7ab,
300
        0x3b124e8b,
301
        0x1dc9faf7, 0x4b6d1856, 0x26a36631,
302
        0xeae397b2,
303
        0x3a6efa74, 0xdd5b4332, 0x6841e7f7,
304
        0xca7820fb,
305
        0xfb0af54e, 0xd8feb397, 0x454056ac,
306
        0xba489527,
307
        0x55533a3a, 0x20838d87, 0xfe6ba9b7,
308
        0xd096954b,
309
        0x55a867bc, 0xa1159a58, 0xcca92963,
310
        0x99e1db33,
311
        0xa62a4a56, 0x3f3125f9, 0x5ef47e1c,
312
        0x9029317c,
313
        0xfdf8e802, 0x04272f70, 0x80bb155c,
314
        0x05282ce3,
315
        0x95c11548, 0xe4c66d22, 0x48c1133f,
316
        0xc70f86dc,
317
        0x07f9c9ee, 0x41041f0f, 0x404779a4,
318
        0x5d886e17,
319
        0x325f51eb, 0xd59bc0d1, 0xf2bcc18f,
320
        0x41113564,
321
        0x257b7834, 0x602a9c60, 0xdff8e8a3,
322
        0x1f636c1b,
323
        0x0e12b4c2, 0x02e1329e, 0xaf664fd1,
324
        0xcad18115,
325
        0x6b2395e0, 0x333e92e1, 0x3b240b62,
326
        0xeebeb922,
327
        0x85b2a20e, 0xe6ba0d99, 0xde720c8c,
328
        0x2da2f728,
329
        0xd0127845, 0x95b794fd, 0x647d0862,
330
        0xe7ccf5f0,
331
        0x5449a36f, 0x877d48fa, 0xc39dfd27,
332
        0xf33e8d1e,
333
        0x0a476341, 0x992eff74, 0x3a6f6eab,
334
        0xf4f8fd37,
335
        0xa812dc60, 0xa1ebddf8, 0x991be14c,
336
        0xdb6e6b0d,
337
        0xc67b5510, 0x6d672c37, 0x2765d43b,
338
        0xdcd0e804,
339
        0xf1290dc7, 0xcc00ffa3, 0xb5390f92,
340
        0x690fed0b,
341
        0x667b9ffb, 0xcedb7d9c, 0xa091cf0b,
342
        0xd9155ea3,
343
        0xbb132f88, 0x515bad24, 0x7b9479bf,
344
        0x763bd6eb,
345
        0x37392eb3, 0xcc115979, 0x8026e297,
346
        0xf42e312d,
347
        0x6842ada7, 0xc66a2b3b, 0x12754ccc,
348
        0x782ef11c,
349
        0x6a124237, 0xb79251e7, 0x06a1bbe6,
350
        0x4bfb6350,
351
        0x1a6b1018, 0x11caedfa, 0x3d25bdd8,
352
        0xe2e1c3c9,
353
        0x44421659, 0x0a121386, 0xd90cec6e,
354
        0xd5abea2a,
355
        0x64af674e, 0xda86a85f, 0xbebfe988,
356
        0x64e4c3fe,
357
        0x9dbc8057, 0xf0f7c086, 0x60787bf8,
358
        0x6003604d,
359
        0xd1fd8346, 0xf6381fb0, 0x7745ae04,
360
        0xd736fccc,
361
        0x83426b33, 0xf01eab71, 0xb0804187,
362
        0x3c005e5f,
363
        0x77a057be, 0xbde8ae24, 0x55464299,
364
        0xbf582e61,
365
        0x4e58f48f, 0xf2ddfda2, 0xf474ef38,
366
        0x8789bdc2,
367
        0x5366f9c3, 0xc8b38e74, 0xb475f255,
368
        0x46fcd9b9,
369
        0x7aeb2661, 0x8b1ddf84, 0x846a0e79,
370
        0x915f95e2,
371
        0x466e598e, 0x20b45770, 0x8cd55591,
372
        0xc902de4c,
373
        0xb90bace1, 0xbb8205d0, 0x11a86248,
374
        0x7574a99e,
375
        0xb77f19b6, 0xe0a9dc09, 0x662d09a1,
376
        0xc4324633,
377
        0xe85a1f02, 0x09f0be8c, 0x4a99a025,
378
        0x1d6efe10,
379
        0x1ab93d1d, 0x0ba5a4df, 0xa186f20f,
380
        0x2868f169,
381
        0xdcb7da83, 0x573906fe, 0xa1e2ce9b,
382
        0x4fcd7f52,
383
        0x50115e01, 0xa70683fa, 0xa002b5c4,
384
        0x0de6d027,
385
        0x9af88c27, 0x773f8641, 0xc3604c06,
386
        0x61a806b5,
387
        0xf0177a28, 0xc0f586e0, 0x006058aa,
388
        0x30dc7d62,
389
        0x11e69ed7, 0x2338ea63, 0x53c2dd94,
390
        0xc2c21634,
391
        0xbbcbee56, 0x90bcb6de, 0xebfc7da1,
392
        0xce591d76,
393
        0x6f05e409, 0x4b7c0188, 0x39720a3d,
394
        0x7c927c24,
395
        0x86e3725f, 0x724d9db9, 0x1ac15bb4,
396
        0xd39eb8fc,
397
        0xed545578, 0x08fca5b5, 0xd83d7cd3,
398
        0x4dad0fc4,
399
        0x1e50ef5e, 0xb161e6f8, 0xa28514d9,
400
        0x6c51133c,
401
        0x6fd5c7e7, 0x56e14ec4, 0x362abfce,
402
        0xddc6c837,
403
        0xd79a3234, 0x92638212, 0x670efa8e,
404
        0x406000e0,
405
        0x3a39ce37, 0xd3faf5cf, 0xabc27737,
406
        0x5ac52d1b,
407
        0x5cb0679e, 0x4fa33742, 0xd3822740,
408
        0x99bc9bbe,
409
        0xd5118e9d, 0xbf0f7315, 0xd62d1c7e,
410
        0xc700c47b,
411
        0xb78c1b6b, 0x21a19045, 0xb26eb1be,
412
        0x6a366eb4,
413
        0x5748ab2f, 0xbc946e79, 0xc6a376d2,
414
        0x6549c2c8,
415
        0x530ff8ee, 0x468dde7d, 0xd5730a1d,
416
        0x4cd04dc6,
417
        0x2939bbdb, 0xa9ba4650, 0xac9526e8,
418
        0xbe5ee304,
419
        0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2,
420
        0x9a86ee22,
421
        0xc089c2b8, 0x43242ef6, 0xa51e03aa,
422
        0x9cf2d0a4,
423
        0x83c061ba, 0x9be96a4d, 0x8fe51550,
424
        0xba645bd6,
425
        0x2826a2f9, 0xa73a3ae1, 0x4ba99586,
426
        0xef5562e9,
427
        0xc72fefd3, 0xf752f7da, 0x3f046f69,
428
        0x77fa0a59,
429
        0x80e4a915, 0x87b08601, 0x9b09e6ad,
430
        0x3b3ee593,
431
        0xe990fd5a, 0x9e34d797, 0x2cf0b7d9,
432
        0x022b8b51,
433
        0x96d5ac3a, 0x017da67d, 0xd1cf3ed6,
434
        0x7c7d2d28,
435
        0x1f9f25cf, 0xadf2b89b, 0x5ad6b472,
436
        0x5a88f54c,
437
        0xe029ac71, 0xe019a5e6, 0x47b0acfd,
438
        0xed93fa9b,
439
        0xe8d3c48d, 0x283b57cc, 0xf8d56629,
440
        0x79132e28,
441
        0x785f0191, 0xed756055, 0xf7960e44,
442
        0xe3d35e8c,
443
        0x15056dd4, 0x88f46dba, 0x03a16125,
444
        0x0564f0bd,
445
        0xc3eb9e15, 0x3c9057a2, 0x97271aec,
446
        0xa93a072a,
447
        0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb,
448
        0x26dcf319,
449
        0x7533d928, 0xb155fdf5, 0x03563482,
450
        0x8aba3cbb,
451
        0x28517711, 0xc20ad9f8, 0xabcc5167,
452
        0xccad925f,
453
        0x4de81751, 0x3830dc8e, 0x379d5862,
454
        0x9320f991,
455
        0xea7a90c2, 0xfb3e7bce, 0x5121ce64,
456
        0x774fbe32,
457
        0xa8b6e37e, 0xc3293d46, 0x48de5369,
458
        0x6413e680,
459
        0xa2ae0810, 0xdd6db224, 0x69852dfd,
460
        0x09072166,
461
        0xb39a460a, 0x6445c0dd, 0x586cdecf,
462
        0x1c20c8ae,
463
        0x5bbef7dd, 0x1b588d40, 0xccd2017f,
464
        0x6bb4e3bb,
465
        0xdda26a7e, 0x3a59ff45, 0x3e350a44,
466
        0xbcb4cdd5,
467
        0x72eacea8, 0xfa6484bb, 0x8d6612ae,
468
        0xbf3c6f47,
469
        0xd29be463, 0x542f5d9e, 0xaec2771b,
470
        0xf64e6370,
471
        0x740e0d8d, 0xe75b1357, 0xf8721671,
472
        0xaf537d5d,
473
        0x4040cb08, 0x4eb4e2cc, 0x34d2466a,
474
        0x0115af84,
475
        0xe1b00428, 0x95983a1d, 0x06b89fb4,
476
        0xce6ea048,
477
        0x6f3f3b82, 0x3520ab82, 0x011a1d4b,
478
        0x277227f8,
479
        0x611560b1, 0xe7933fdc, 0xbb3a792b,
480
        0x344525bd,
481
        0xa08839e1, 0x51ce794b, 0x2f32c9b7,
482
        0xa01fbac9,
483
        0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3,
484
        0xa1e8aac7,
485
        0x1a908749, 0xd44fbd9a, 0xd0dadecb,
486
        0xd50ada38,
487
        0x0339c32a, 0xc6913667, 0x8df9317c,
488
        0xe0b12b4f,
489
        0xf79e59b7, 0x43f5bb3a, 0xf2d519ff,
490
        0x27d9459c,
491
        0xbf97222c, 0x15e6fc2a, 0x0f91fc71,
492
        0x9b941525,
493
        0xfae59361, 0xceb69ceb, 0xc2a86459,
494
        0x12baa8d1,
495
        0xb6c1075e, 0xe3056a0c, 0x10d25065,
496
        0xcb03a442,
497
        0xe0ec6e0e, 0x1698db3b, 0x4c98a0be,
498
        0x3278e964,
499
        0x9f1f9532, 0xe0d392df, 0xd3a0342b,
500
        0x8971f21e,
501
        0x1b0a7441, 0x4ba3348c, 0xc5be7120,
502
        0xc37632d8,
503
        0xdf359f8d, 0x9b992f2e, 0xe60b6f47,
504
        0x0fe3f11d,
505
        0xe54cda54, 0x1edad891, 0xce6279cf,
506
        0xcd3e7e6f,
507
        0x1618b166, 0xfd2c1d05, 0x848fd2c5,
508
        0xf6fb2299,
509
        0xf523f357, 0xa6327623, 0x93a83531,
510
        0x56cccd02,
511
        0xacf08162, 0x5a75ebb5, 0x6e163697,
512
        0x88d273cc,
513
        0xde966292, 0x81b949d0, 0x4c50901b,
514
        0x71c65614,
515
        0xe6c6c7bd, 0x327a140a, 0x45e1d006,
516
        0xc3f27b9a,
517
        0xc9aa53fd, 0x62a80f00, 0xbb25bfe2,
518
        0x35bdd2f6,
519
        0x71126905, 0xb2040222, 0xb6cbcf7c,
520
        0xcd769c2b,
521
        0x53113ec0, 0x1640e3d3, 0x38abbd60,
522
        0x2547adf0,
523
        0xba38209c, 0xf746ce76, 0x77afa1c5,
524
        0x20756060,
525
        0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0,
526
        0x4cf9aa7e,
527
        0x1948c25c, 0x02fb8a8c, 0x01c36ae4,
528
        0xd6ebe1f9,
529
        0x90d4f869, 0xa65cdea0, 0x3f09252d,
530
        0xc208e69f,
531
        0xb74e6132, 0xce77e25b, 0x578fdfe3,
532
        0x3ac372e6,
533
      ]
534

  
535
      d_base = key.bytes.slice(0, (16 + 2) * 4)
536
      d = d_base.dup
537

  
538
      (16 + 2).times do |i|
539
        ri = d.shift
540
        d = d_base.dup if d.empty?
541

  
542
        ri <<= 8
543
        ri |= d.shift
544
        d = d_base.dup if d.empty?
545

  
546
        ri <<= 8
547
        ri |= d.shift
548
        d = d_base.dup if d.empty?
549

  
550
        ri <<= 8
551
        ri |= d.shift
552
        d = d_base.dup if d.empty?
553

  
554
        @p[i] ^= ri
555
      end
556

  
557
      l, r = [0, 0]
558
      0.step(16 + 2 - 1, 2) do |i|
559
        l, r = Common::encrypt(l, r, self)
560
        @p[i] = l
561
        @p[i+1] = r
562
      end
563
      0.step(4 * 256 - 1, 2) do |i|
564
        l, r = Common::encrypt(l, r, self)
565
        @s[i] = l
566
        @s[i+1] = r
567
      end
568
      @p.freeze
569
      @s.freeze
570
    end
571
  end
572
end
plugin/world/blowfish_ecb/test/cipher_test.rb
1
require 'test/unit'
2
require 'blowfish_ecb'
3

  
4
class CipherTest < Test::Unit::TestCase
5
  def test_identity
6
    cipher = Blowfish::ECB::Cipher.new("cipher_test")
7
    ["hogefugahige", "1234567890", (1..255).to_a.pack("C*"), "", "1"].each do |data|
8
      assert_equal(data, cipher.decrypt(cipher.encrypt(data)), "Failed at #{data}")
9
    end
10
  end
11
end
plugin/world/blowfish_ecb/test/key_test.rb
1
require 'test/unit'
2
require 'blowfish_ecb'
3
require 'pp'
4

  
5
# Test cases taken from OpenSSL's Blowfish implementation
6
# https://github.com/openssl/openssl/blob/master/test/bftest.c
7
class KeyTest < Test::Unit::TestCase
8
  def test_initialize
9
    key = Blowfish::ECB::Key.new("foobar")
10
    assert_not_nil(key)
11
  end
12

  
13
  def test_set_key
14
    key = [0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
15
        0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
16
        0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
17
        0x88
18
    ]
19
    data = [0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10].pack("C*")
20
    expected = [
21
      [0xF9, 0xAD, 0x59, 0x7C, 0x49, 0xDB, 0x00, 0x5E],
22
      [0xE9, 0x1D, 0x21, 0xC1, 0xD9, 0x61, 0xA6, 0xD6],
23
      [0xE9, 0xC2, 0xB7, 0x0A, 0x1B, 0xC6, 0x5C, 0xF3],
24
      [0xBE, 0x1E, 0x63, 0x94, 0x08, 0x64, 0x0F, 0x05],
25
      [0xB3, 0x9E, 0x44, 0x48, 0x1B, 0xDB, 0x1E, 0x6E],
26
      [0x94, 0x57, 0xAA, 0x83, 0xB1, 0x92, 0x8C, 0x0D],
27
      [0x8B, 0xB7, 0x70, 0x32, 0xF9, 0x60, 0x62, 0x9D],
28
      [0xE8, 0x7A, 0x24, 0x4E, 0x2C, 0xC8, 0x5E, 0x82],
29
      [0x15, 0x75, 0x0E, 0x7A, 0x4F, 0x4E, 0xC5, 0x77],
30
      [0x12, 0x2B, 0xA7, 0x0B, 0x3A, 0xB6, 0x4A, 0xE0],
31
      [0x3A, 0x83, 0x3C, 0x9A, 0xFF, 0xC5, 0x37, 0xF6],
32
      [0x94, 0x09, 0xDA, 0x87, 0xA9, 0x0F, 0x6B, 0xF2],
33
      [0x88, 0x4F, 0x80, 0x62, 0x50, 0x60, 0xB8, 0xB4],
34
      [0x1F, 0x85, 0x03, 0x1C, 0x19, 0xE1, 0x19, 0x68],
35
      [0x79, 0xD9, 0x37, 0x3A, 0x71, 0x4C, 0xA3, 0x4F],
36
      [0x93, 0x14, 0x28, 0x87, 0xEE, 0x3B, 0xE1, 0x5C],
37
      [0x03, 0x42, 0x9E, 0x83, 0x8C, 0xE2, 0xD1, 0x4B],
38
      [0xA4, 0x29, 0x9E, 0x27, 0x46, 0x9F, 0xF6, 0x7B],
39
      [0xAF, 0xD5, 0xAE, 0xD1, 0xC1, 0xBC, 0x96, 0xA8],
40
      [0x10, 0x85, 0x1C, 0x0E, 0x38, 0x58, 0xDA, 0x9F],
41
      [0xE6, 0xF5, 0x1E, 0xD7, 0x9B, 0x9D, 0xB2, 0x1F],
42
      [0x64, 0xA6, 0xE1, 0x4A, 0xFD, 0x36, 0xB4, 0x6F],
43
      [0x80, 0xC7, 0xD7, 0xD4, 0x5A, 0x54, 0x79, 0xAD],
44
      [0x05, 0x04, 0x4B, 0x62, 0xFA, 0x52, 0xD0, 0x80],
45
    ]
46

  
47
    (0...24).each do |i|
48
      bf_key = Blowfish::ECB::Key.new(key[0,i+1].pack("C*"))
49
      enc = Blowfish::ECB.encrypt(data, bf_key)
50
      assert_equal(expected[i].pack("C*"), enc, "Failed at case #{i}")
51
      dec = Blowfish::ECB.decrypt(enc, bf_key)
52
      assert_equal(data, dec, "Failed at case #{i}")
53
    end
54
  end
55

  
56
  def test_raw
57
    cases = [
58
        {key: "abcdefghijklmnopqrstuvwxyz", data: [0x424c4f57, 0x46495348], expected: [0x324ed0fe, 0xf413a203]},
59
        {key: "Who is John Galt?", data: [0xfedcba98, 0x76543210], expected: [0xcc91732b, 0x8022f684]}
60
    ]
61

  
62
    cases.each do |c|
63
      bf_key = Blowfish::ECB::Key.new(c[:key])
64
      l, r = Blowfish::ECB::Common.encrypt(c[:data][0], c[:data][1], bf_key)
65
      assert_equal(c[:expected], [l, r])
66
    end
67
  end
68
end
plugin/world/blowfish_ecb/test/run_test.rb
1
require 'test/unit'
2

  
3
$LOAD_PATH.unshift(File.expand_path(File.join(__dir__, '..')))
4
exit Test::Unit::AutoRunner.run(true, __dir__)
plugin/world/keep.rb
6 6
require 'openssl'
7 7
require 'securerandom'
8 8
require 'json'
9
require_relative 'blowfish_ecb/blowfish_ecb'
9 10

  
10 11
=begin rdoc
11 12
アカウントデータの永続化を行うユーティリティ。
......
122 123
      account_data end
123 124

  
124 125
    def encrypt(str)
125
      cipher = OpenSSL::Cipher.new('bf-ecb').encrypt
126
      cipher.key_len = ACCOUNT_CRYPT_KEY_LEN
127
      cipher.key = key
128
      cipher.update(str) << cipher.final end
126
      cipher = Blowfish::ECB::Cipher.new(key)
127
      cipher.encrypt(str) end
129 128

  
130 129
    def decrypt(binary_data)
131
      cipher = OpenSSL::Cipher.new('bf-ecb').decrypt
132
      cipher.key = key
133
      str = cipher.update(binary_data) << cipher.final
134
      str.force_encoding(Encoding::UTF_8)
135
      str end
130
      cipher = Blowfish::ECB::Cipher.new(key)
131
      cipher.decrypt(binary_data).force_encoding(Encoding::UTF_8) end
136 132

  
137 133
    private
138 134

  
(5-5/6)