プロジェクト

全般

プロフィール

バグ #1585 » 0001-added-OpenSSL-ver3.patch

git format-patch developで生成したpatch - ncaq エヌユル, 2022-05-25 19:40

差分を表示:

plugin/world/keep.rb
15 15
  module Keep
16 16
    ACCOUNT_FILE = File.join(Environment::SETTINGDIR, 'core', 'token').freeze
17 17
    ACCOUNT_TMP = (ACCOUNT_FILE + ".write").freeze
18
    ACCOUNT_CRYPT_KEY_LEN = 16
18
    # 暗号化ライブラリが32 bytesを要求してくる。
19
    ACCOUNT_CRYPT_KEY_LEN = 32
19 20

  
20 21
    extend Keep
21 22
    @@service_lock = Monitor.new
22 23

  
24
    # 暗号化手法を統一して扱いたいので共有変数にする。
25
    @@cipher = OpenSSL::Cipher::AES256.new("cbc")
26

  
23 27
    def key
24
      key = UserConfig[:account_crypt_key] ||= SecureRandom.random_bytes(ACCOUNT_CRYPT_KEY_LEN)
25
      key[0, ACCOUNT_CRYPT_KEY_LEN] end
28
      # また暗号化方法が将来的な非推奨になった時に、削除される前に変換出来るように暗号化方法を保存しておく。
29
      account_crypt =
30
        UserConfig[:account_crypt] || {key: SecureRandom.random_bytes(ACCOUNT_CRYPT_KEY_LEN).to_s, cipher_name: @@cipher.name}
31
      UserConfig[:account_crypt] = account_crypt
32
      account_crypt[:key][0, ACCOUNT_CRYPT_KEY_LEN] end
26 33

  
27 34
    # 全てのアカウント情報をオブジェクトとして返す
28 35
    # ==== Return
......
122 129
      account_data end
123 130

  
124 131
    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
132
      begin
133
        @@cipher.encrypt
134
        @@cipher.key_len = ACCOUNT_CRYPT_KEY_LEN
135
        @@cipher.key = key
136
        @@cipher.update(str) << @@cipher.final
137
      rescue => e
138
        chi_fatal_alert e.inspect
139
      end end
129 140

  
130 141
    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
142
      begin
143
        @@cipher.decrypt
144
        @@cipher.key = key
145
        str = @@cipher.update(binary_data) << @@cipher.final
146
        str.force_encoding(Encoding::UTF_8)
147
        str
148
      rescue => e
149
        chi_fatal_alert <<"EOS"
150
暗号の復号時にエラーが起きました。
151
特にOpenSSLがアップデートされたりした場合にこのエラーが起きた場合は、
152
~/.mikutter/settings/setting.ymlからaccount_cryptで始まるものを消して、
153
~/.mikutter/settings/core/tokenファイルを消して、
154
アカウントを再認証すると上手くいく可能性があります。
155

  
156
#{e.inspect}
157
EOS
158
      end end
136 159

  
137 160
    private
138 161

  
(1-1/6)