rgsshd 0.0.1

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.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rgsshd.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 yoshikizh
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,97 @@
1
+ # Rgsshd
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'rgsshd'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install rgsshd
18
+
19
+ ## Usage
20
+
21
+ RGSSHD加密包
22
+
23
+ 制作思路:
24
+ 1.音乐文件,图片文件 ZLIB 加密 数据库文件 直接打入加密包
25
+
26
+ 2.数据结构:
27
+
28
+ 总文件头:开始地址:0x00
29
+ 00-07(8byte) 描述数据包名称
30
+ 08-0F(8byte) 描述版本号
31
+ 10-13(4byte) Audio文件头地址
32
+ 14-17(4byte) Audio文件头长度
33
+ 18-1B(4byte) Graphics文件头地址
34
+ 1C-1F(4byte) Graphics文件头长度
35
+ 20-23(4byte) Date文件头地址
36
+ 24-27(4byte) Date文件头长度
37
+
38
+
39
+ Audio文件头:
40
+ AUDIO文件块地址 (4byte) --|
41
+ AUDIO文件块长度 (4byte) --|--Total(12byte)
42
+ AUDIO文件数量 (4byte) --|
43
+
44
+ "hash = { 路径\文件名1=>[文件1地址,文件1长度],
45
+ 路径\文件名2=>[文件2地址,文件2长度],
46
+ ..............
47
+ ...........
48
+ 路径\文件名x=>[文件x地址,文件x长度],
49
+ }"
50
+
51
+
52
+ Audio文件块:文件1内容+文件2内容+文件3内容......
53
+
54
+
55
+
56
+
57
+ Graphics文件头:
58
+ Graphics文件块地址 (4byte) --|
59
+ Graphics文件块长度 (4byte) --|--Total(12byte)
60
+ Graphics文件数量 (4byte) --|
61
+
62
+ "hash = { 路径\文件名1=>[文件1地址,文件1长度],
63
+ 路径\文件名2=>[文件2地址,文件2长度],
64
+ ..............
65
+ ...........
66
+ 路径\文件名x=>[文件x地址,文件x长度],
67
+ }"
68
+
69
+
70
+ Graphics文件块:文件1内容+文件2内容+文件3内容......
71
+
72
+
73
+
74
+ Data文件头:
75
+ Data文件块地址 (4byte) --|
76
+ Data文件块长度 (4byte) --|--Total(12byte)
77
+ Data文件数量 (4byte) --|
78
+
79
+ "hash = { 路径\文件名1=>[文件1地址,文件1长度],
80
+ 路径\文件名2=>[文件2地址,文件2长度],
81
+ ..............
82
+ ...........
83
+ 路径\文件名x=>[文件x地址,文件x长度],
84
+ }"
85
+
86
+
87
+ Data文件块:文件1内容+文件2内容+文件3内容......
88
+
89
+ 数据包结尾块信息:预留16个字节
90
+
91
+ ## Contributing
92
+
93
+ 1. Fork it
94
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
95
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
96
+ 4. Push to the branch (`git push origin my-new-feature`)
97
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,434 @@
1
+ require "rgsshd/version"
2
+
3
+ #==============================================================================
4
+ # ■ RGSSHD_Package
5
+ #------------------------------------------------------------------------------
6
+ #  数据包生成的模块。
7
+ #==============================================================================
8
+ module Set_File
9
+ OFFSET = 0x0c
10
+ def self.load
11
+ $rgss = File.open("Game.rgsshide","rb")
12
+ tp = $rgss.read(16)
13
+ if tp[0,8] != "RGSSHIDE"
14
+ raise "不是RGSSHIDE文件!"
15
+ end
16
+ if tp[8,8] != "20080808"
17
+ raise "不支持的版本!"
18
+ end
19
+ @head = []
20
+ @audioH = []
21
+ @graphicsH = []
22
+ @dataH = []
23
+ 6.times{@head.push $rgss.read(4).unpack("L")[0]}
24
+ $rgss.pos = @head[0]
25
+ 3.times{@audioH.push $rgss.read(4).unpack("L")[0]}
26
+ $rgss.pos = @head[2]
27
+ 3.times{@graphicsH.push $rgss.read(4).unpack("L")[0]}
28
+ $rgss.pos = @head[4]
29
+ 3.times{@dataH.push $rgss.read(4).unpack("L")[0]}
30
+
31
+ $rgss.pos = @head[0] + OFFSET
32
+ @audioInf = eval(Zlib::Inflate.inflate($rgss.read(@head[1]- OFFSET)))
33
+ $rgss.pos = @head[2] + OFFSET
34
+ @graphicsInf = eval(Zlib::Inflate.inflate($rgss.read(@head[3]- OFFSET)))
35
+ $rgss.pos = @head[4] + OFFSET
36
+ @dataInf = eval(Zlib::Inflate.inflate($rgss.read(@head[5]- OFFSET)))
37
+ end
38
+
39
+ #--------------------------------------------------------------------------
40
+ # ● 解码代码
41
+ #--------------------------------------------------------------------------
42
+ def self.inflate(filename,kind)
43
+ # Set_File.load if $rgss.closed?
44
+ case kind
45
+ when 0
46
+ inf = @audioInf[filename]
47
+ offset = @audioH[0]
48
+ when 1
49
+ inf = @graphicsInf[filename]
50
+ offset = @graphicsH[0]
51
+ when 2
52
+ inf = @dataInf[filename]
53
+ offset = @dataH[0]
54
+ end
55
+ $rgss.pos = inf[0] + offset
56
+ code = $rgss.read(inf[1])
57
+ if kind != 2
58
+ code = Zlib::Inflate.inflate(code)
59
+ end
60
+ return code
61
+ end
62
+
63
+ end
64
+
65
+
66
+ module RGSSHD_Package
67
+
68
+ Audios = ["wav","mp3","ogg","wma","mid"]
69
+ Graphicses = ["bmp","jpg","png"]
70
+ Databases = ["rxdata"]
71
+
72
+ # 文件头地址
73
+ LpAudioHead = 0x10 #||
74
+ LpAudioLength = 0x14 #||
75
+ LpGraphicsHead = 0x18 #||TOTAL(16byte)
76
+ LpGraphicsLength = 0x1C #||
77
+ LpDataHead = 0x20 #||
78
+ LpDataLength = 0x24 #||
79
+
80
+ module_function
81
+ #--------------------------------------------------------------------------
82
+ # ● 开始制作数据包
83
+ #--------------------------------------------------------------------------
84
+ def start
85
+ @count = 0
86
+ @block = 0
87
+ @sprite = Sprite.new
88
+ @sprite_base = Sprite.new
89
+ @sprite_base2 = Sprite.new
90
+ @bitmap = Bitmap.new(14,16)
91
+ @bitmap.fill_rect(Rect.new(0,0,16,16),color = Color.new(0,255,0,255))
92
+ bitmap2 = Bitmap.new(322,18)
93
+ bitmap2.fill_rect(Rect.new(0,0,322,18),color = Color.new(128,128,128,255))
94
+ bitmap3 = Bitmap.new(324,20)
95
+ bitmap3.fill_rect(Rect.new(0,0,324,20),color = Color.new(255,0,0,255))
96
+
97
+ auth = Sprite.new
98
+ auth.bitmap = Bitmap.new(150,16)
99
+ auth.bitmap.font.size = 14
100
+ auth.bitmap.draw_text(0,0,150,16,"RGSSHD"+" "+"作者:秀秀")
101
+ auth.x,auth.y,auth.z = 250,300,103
102
+
103
+ @sprite_base.bitmap = bitmap2
104
+ @sprite_base.x = (640-322)/2
105
+ @sprite_base.y = 300
106
+ @sprite_base.z = 102
107
+
108
+ @sprite_base2.bitmap = bitmap3
109
+ @sprite_base2.x = (640-322)/2 - 1
110
+ @sprite_base2.y = 300 - 1
111
+ @sprite_base2.z = 101
112
+
113
+ @old_dir = Dir.pwd
114
+ @audio_files = []
115
+ @graphics_files = []
116
+ @database_files = []
117
+ @path = ""
118
+ self.next_file(@path,0)
119
+ self.next_file(@path,1)
120
+ self.next_file(@path,2)
121
+ if (@audio_files + @graphics_files + @database_files).size == 0
122
+ "没有搜索到资源"
123
+ return
124
+ end
125
+
126
+ @all_files = (@audio_files + @graphics_files + @database_files).size
127
+ @rate = (@all_files / 20).to_f
128
+
129
+
130
+ Dir.chdir(@old_dir)
131
+ self.create_file
132
+ self.write_file_header
133
+ self.write_audio_header
134
+ self.write_audio_block
135
+ self.write_graphics_header
136
+ self.write_graphics_block
137
+ self.write_database_header
138
+ self.write_database_block
139
+ self.write_file_end
140
+ p "Game.RGSSHD 制作成功"
141
+ exit
142
+ end
143
+
144
+ def create_file
145
+ @file = File.open("Game.rgsshide","wb")
146
+ end
147
+
148
+ def write_file_header
149
+ @file.write "RGSSHIDE"
150
+ @file.write "20080808"
151
+ end
152
+
153
+ def write_audio_header
154
+ @file.pos = 0x28
155
+ if @audio_files.size == 0
156
+ @@audio_head_adress = 0x28
157
+ @@audio_head_length = 12
158
+ @audio_files_block_adress = 0
159
+ @audio_files_block_length = 0
160
+ @audio_files_amount = 0
161
+ return
162
+ end
163
+ Dir.chdir(@old_dir)
164
+ posop = 0
165
+ fsize = 0
166
+ @tempa = ""
167
+ audio_list = "resource_list = {\n"
168
+ begin
169
+ for name in @audio_files
170
+ begin
171
+ fr = File.open(name,"rb") # 打开目标Audio文件
172
+ code = Zlib::Deflate.deflate(fr.read,9)
173
+ fsize = code.size
174
+ @tempa += code
175
+ audio_list += sprintf("%s=>[%d,%d],\n","\"#{name.split(/\./)[0]}\"",
176
+ posop,fsize)
177
+ posop += fsize # 记录位置
178
+ rescue
179
+ print "\"#{name}\" can't open"
180
+ ensure
181
+ fr.close
182
+ @count += 1
183
+ if @count >= @rate
184
+ @sprite_base.bitmap.blt(@block*16,0,@bitmap,Rect.new(0,0,14,16))
185
+ @block += 1
186
+ @count = 0
187
+ end
188
+ Graphics.update
189
+ end
190
+ end
191
+ ensure
192
+ audio_list.slice!(audio_list.size-2,1)
193
+ audio_list += "}\n"
194
+ audio_list = Zlib::Deflate.deflate(audio_list,9)
195
+
196
+ @audio_head_adress = 0x28
197
+ @audio_head_length = audio_list.size + 12
198
+ @audio_files_block_adress = 0x28 + @audio_head_length
199
+ @audio_files_block_length = @tempa.length
200
+ @audio_files_amount = @audio_files.length
201
+
202
+ @file.pos = LpAudioHead
203
+ @file.write [@audio_head_adress].pack("L")
204
+ @file.pos = LpAudioLength
205
+ @file.write [@audio_head_length].pack("L")
206
+
207
+ @file.pos = 0x28
208
+ @file.write [@audio_files_block_adress].pack("L")
209
+ @file.pos = 0x28+4
210
+ @file.write [@audio_files_block_length].pack("L")
211
+ @file.pos = 0x28+8
212
+ @file.write [@audio_files_amount].pack("L")
213
+ @file.pos = 0x28+12
214
+ @file.write audio_list
215
+ while false
216
+ p @audio_head_adress
217
+ p @audio_head_length
218
+ p "文件块地址" + @audio_files_block_adress.to_s
219
+ p "文件块长度" + @audio_files_block_length.to_s
220
+ p "文件数量" + @audio_files_amount.to_s
221
+ end
222
+ end
223
+
224
+
225
+ end
226
+
227
+ def write_audio_block
228
+ @file.write @tempa
229
+ end
230
+
231
+ def write_graphics_header
232
+ @gr_start_adr = @audio_files_block_adress+@audio_files_block_length
233
+ @file.pos = @gr_start_adr
234
+
235
+ if @graphics_files.size == 0
236
+ @graphics_head_adress = @gr_start_adr
237
+ @graphics_head_length = 12 # 不包含hash信息块
238
+ @graphics_files_block_adress = 0
239
+ @graphics_files_block_length = 0
240
+ @graphics_files_amount = 0
241
+ return
242
+ end
243
+
244
+ Dir.chdir(@old_dir)
245
+ posop = 0
246
+ fsize = 0
247
+ @tempg = ""
248
+ graphics_list = "resource_list = {\n"
249
+ begin
250
+ for name in @graphics_files
251
+ begin
252
+ fr = File.open(name,"rb") # 打开目标Audio文件
253
+ code = Zlib::Deflate.deflate(fr.read,9)
254
+ fsize = code.size
255
+ #压缩后写入到指定位置
256
+ @tempg += code
257
+ graphics_list += sprintf("%s=>[%d,%d],\n","\"#{name.split(/\./)[0]}\"",
258
+ posop,fsize)
259
+ posop += fsize # 记录现在位置
260
+ rescue
261
+ print "\"#{name}\" can't open"
262
+ ensure
263
+ fr.close
264
+ @count += 1
265
+ if @count >= @rate
266
+ @sprite_base.bitmap.blt(@block*16,0,@bitmap,Rect.new(0,0,14,16))
267
+ @block += 1
268
+ @count = 0
269
+ end
270
+ Graphics.update
271
+ end
272
+ end
273
+ ensure
274
+ graphics_list.slice!(graphics_list.size-2,1)
275
+ graphics_list += "}\n"
276
+ graphics_list = Zlib::Deflate.deflate(graphics_list,9)
277
+
278
+ @graphics_head_adress = @gr_start_adr
279
+ @graphics_head_length = graphics_list.size + 12
280
+ @graphics_files_block_adress = @graphics_head_adress + @graphics_head_length
281
+ @graphics_files_block_length = @tempg.length
282
+ @graphics_files_amount = @graphics_files.length
283
+
284
+ @file.pos = LpGraphicsHead
285
+ @file.write [@graphics_head_adress].pack("L")
286
+ @file.pos = LpGraphicsLength
287
+ @file.write [@graphics_head_length].pack("L")
288
+
289
+ @file.pos = @graphics_head_adress
290
+ @file.write [@graphics_files_block_adress].pack("L")
291
+ @file.pos = @graphics_head_adress+4
292
+ @file.write [@graphics_files_block_length].pack("L")
293
+ @file.pos = @graphics_head_adress+8
294
+ @file.write [@graphics_files_amount].pack("L")
295
+ @file.pos = @graphics_head_adress+12
296
+ @file.write graphics_list
297
+ end
298
+ end
299
+
300
+ def write_graphics_block
301
+ @file.write @tempg
302
+ end
303
+
304
+ def write_database_header
305
+ @da_start_adr = @graphics_files_block_adress + @graphics_files_block_length
306
+ @file.pos = @da_start_adr
307
+
308
+ if @database_files.size == 0
309
+ @data_head_adress = @gr_start_adr
310
+ @data_head_length = 12 # 不包含hash信息块
311
+ @data_files_block_adress = 0
312
+ @data_files_block_length = 0
313
+ @data_files_amount = 0
314
+ return
315
+ end
316
+ p @database_files
317
+ Dir.chdir(@old_dir)
318
+ posop = 0
319
+ fsize = 0
320
+ @tempd = ""
321
+ data_list = "resource_list = {\n"
322
+ begin
323
+ for name in @database_files
324
+ begin
325
+ fr = File.open(name,"rb") # 打开目标Audio文件
326
+ code = fr.read # 导出内容
327
+ fsize = code.size
328
+ #压缩后写入到指定位置
329
+ @tempd += code
330
+ data_list += sprintf("%s=>[%d,%d],\n","\"#{name.split(/\./)[0]}\"",
331
+ posop,fsize)
332
+ posop += fsize # 记录现在位置
333
+ rescue
334
+ print "\"#{name}\" can't open"
335
+ ensure
336
+ fr.close
337
+ @count += 1
338
+ if @count >= @rate
339
+ @sprite_base.bitmap.blt(@block*16,0,@bitmap,Rect.new(0,0,14,16))
340
+ @block += 1
341
+ @count = 0
342
+ end
343
+ Graphics.update
344
+ end
345
+ end
346
+ ensure
347
+ data_list.slice!(data_list.size-2,1)
348
+ data_list += "}\n"
349
+ data_list = Zlib::Deflate.deflate(data_list,9)
350
+
351
+ @data_head_adress = @da_start_adr
352
+ @data_head_length = data_list.size + 12
353
+ @data_files_block_adress = @data_head_adress + @data_head_length
354
+ @data_files_block_length = @tempd.length
355
+ @data_files_amount = @database_files.length
356
+
357
+ @file.pos = LpDataHead
358
+ @file.write [@data_head_adress].pack("L")
359
+ @file.pos = LpDataLength
360
+ @file.write [@data_head_length].pack("L")
361
+
362
+ @file.pos = @data_head_adress
363
+ @file.write [@data_files_block_adress].pack("L")
364
+ @file.pos = @data_head_adress+4
365
+ @file.write [@data_files_block_length].pack("L")
366
+ @file.pos = @data_head_adress+8
367
+ @file.write [@data_files_amount].pack("L")
368
+ @file.pos = @data_head_adress+12
369
+ @file.write data_list
370
+ end
371
+
372
+ end
373
+
374
+ def write_database_block
375
+ @file.write @tempd
376
+ end
377
+
378
+ def write_file_end
379
+ @file.write "RGSSHIDE-END"
380
+ @file.close
381
+ end
382
+
383
+ #--------------------------------------------------------------------------
384
+ # ● 搜索全部资源文件
385
+ #--------------------------------------------------------------------------
386
+ def next_file(path,kind)
387
+ Dir.chdir(@old_dir)
388
+ Dir.chdir(path) if path != ""
389
+ case kind
390
+ when 0
391
+ for f in Dir["*"]
392
+ if FileTest.directory?(f)
393
+ @path = @path + f + "/"
394
+ self.next_file(@path,0)
395
+ else
396
+ if Audios.include? f.split(/\./)[1]
397
+ @audio_files.push @path + f
398
+ end
399
+ end
400
+ end
401
+ when 1
402
+ for f in Dir["*"]
403
+ if FileTest.directory?(f)
404
+ @path = @path + f + "/"
405
+ self.next_file(@path,1)
406
+ else
407
+ if Graphicses.include? f.split(/\./)[1]
408
+ @graphics_files.push @path + f
409
+ end
410
+ end
411
+ end
412
+ when 2
413
+ for f in Dir["*"]
414
+ if FileTest.directory?(f)
415
+ @path = @path + f + "/"
416
+ self.next_file(@path,2)
417
+ else
418
+ if Databases.include? f.split(/\./)[1]
419
+ @database_files.push @path + f
420
+ end
421
+ end
422
+ end
423
+ end
424
+
425
+ path_a = path.split(/\//)
426
+ @path = ""
427
+ for i in 0...path_a.size - 1
428
+ @path += path_a[i] + "/"
429
+ end
430
+ Dir.chdir(@old_dir)
431
+ Dir.chdir(@path) if @path != ""
432
+
433
+ end
434
+ end
@@ -0,0 +1,3 @@
1
+ module Rgsshd
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rgsshd/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "rgsshd"
8
+ gem.version = Rgsshd::VERSION
9
+ gem.authors = ["yoshikizh"]
10
+ gem.email = ["177365340@qq.com"]
11
+ gem.description = "rgsshd encrypt"
12
+ gem.summary = "rgsshd encrypt"
13
+ gem.homepage = "https://github.com/yoshikizh/rgsshd"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_development_dependency "rspec"
21
+ gem.add_development_dependency "bundler", ">= 1.0.0"
22
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rgsshd
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - yoshikizh
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: bundler
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 1.0.0
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.0.0
46
+ description: rgsshd encrypt
47
+ email:
48
+ - 177365340@qq.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - LICENSE.txt
56
+ - README.md
57
+ - Rakefile
58
+ - lib/rgsshd.rb
59
+ - lib/rgsshd/version.rb
60
+ - rgsshd.gemspec
61
+ homepage: https://github.com/yoshikizh/rgsshd
62
+ licenses: []
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubyforge_project:
81
+ rubygems_version: 1.8.24
82
+ signing_key:
83
+ specification_version: 3
84
+ summary: rgsshd encrypt
85
+ test_files: []
86
+ has_rdoc: