Class: S7n::File
- Inherits:
-
Object
- Object
- S7n::File
- Defined in:
- lib/s7n/file.rb
Constant Summary collapse
- VERSION =
パスワードコレクションのファイルのバージョン。
"1.1.0"
- MAGIC =
パスワードコレクションの先頭記述するマジック文字列。
"GPassFile version #{VERSION}"
- IV =
Cipherで使用するIV(Initial Vector)
[5, 23, 1, 123, 12, 3, 54, 94].pack("C8")
Instance Attribute Summary collapse
-
#cipher ⇒ Object
キーとIVから生成したCipher。.
-
#file ⇒ Object
操作対象のファイル。.
-
#key ⇒ Object
パスフレーズから生成したCipher用のキー。.
-
#path ⇒ Object
パスワードコレクションのパス。.
Class Method Summary collapse
-
.create(path, passphrase) ⇒ Object
- パスワードコレクションを格納するファイルを作成する。
path
- 作成するファイルのパスを文字列で指定する。
passphrase
-
ファイルを暗号化するマスターパスフレーズを 文字列で指定する。.
- 作成するファイルのパスを文字列で指定する。
- パスワードコレクションを格納するファイルを作成する。
- .open(path, passphrase) ⇒ Object
Instance Method Summary collapse
-
#close ⇒ Object
ファイルを閉じる。.
-
#initialize(path, passphrase) ⇒ File
constructor
A new instance of File.
Constructor Details
#initialize(path, passphrase) ⇒ File
Returns a new instance of File.
62 63 64 65 66 67 68 |
# File 'lib/s7n/file.rb', line 62 def initialize(path, passphrase) self.path = ::File.(path) self.key = S7n::Key.create_instance("SHA-1", passphrase) self.cipher = S7n::Cipher.create_instance("BF-CBC", :key => key, :iv => S7n::File::IV) self.file = nil end |
Instance Attribute Details
#cipher ⇒ Object
キーとIVから生成したCipher。
57 58 59 |
# File 'lib/s7n/file.rb', line 57 def cipher @cipher end |
#file ⇒ Object
操作対象のファイル。
60 61 62 |
# File 'lib/s7n/file.rb', line 60 def file @file end |
#key ⇒ Object
パスフレーズから生成したCipher用のキー。
54 55 56 |
# File 'lib/s7n/file.rb', line 54 def key @key end |
#path ⇒ Object
パスワードコレクションのパス。
51 52 53 |
# File 'lib/s7n/file.rb', line 51 def path @path end |
Class Method Details
.create(path, passphrase) ⇒ Object
パスワードコレクションを格納するファイルを作成する。
path
-
作成するファイルのパスを文字列で指定する。
passphrase
-
ファイルを暗号化するマスターパスフレーズを 文字列で指定する。
すでにファイルが存在した場合、例外を発生させる。
20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/s7n/file.rb', line 20 def self.create(path, passphrase) path = ::File.(path) if ::File.exist?(path) raise S7n::Exception, "already exist file or directory: #{path}" end ::File.open(path, "w") do |f| key = S7n::Key.create_instance("SHA-1", passphrase) cipher = S7n::Cipher.create_instance("BF-CBC", :key => key, :iv => S7::File::IV) magic = cipher.encrypt(StringIO.new(S7n::File::MAGIC)) f.write(magic) end end |
.open(path, passphrase) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/s7n/file.rb', line 34 def self.open(path, passphrase) path = ::File.(path) if !::File.exist?(path) raise S7n::Exception, "no such file or directory: #{path}" end if !block_given? raise ArgumentError, "no block given" end begin f = self.new(path, passphrase) yield(f) ensure f.close end end |
Instance Method Details
#close ⇒ Object
ファイルを閉じる。
71 72 73 74 75 |
# File 'lib/s7n/file.rb', line 71 def close if self.file self.file.close end end |