Project

General

Profile

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

ncaq エヌユル, 2022-05-25 21:30

View differences:

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.new('aes-256-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
      @@cipher.encrypt
133
      @@cipher.key_len = ACCOUNT_CRYPT_KEY_LEN
134
      @@cipher.key = key
135
      @@cipher.update(str) << @@cipher.final
136
    rescue StandardError => exception
137
      chi_fatal_alert exception.inspect
138
    end
129 139

  
130 140
    def decrypt(binary_data)
131
      cipher = OpenSSL::Cipher.new('bf-ecb').decrypt
132
      cipher.key = key
133
      str = cipher.update(binary_data) << cipher.final
141
      @@cipher.decrypt
142
      @@cipher.key = key
143
      str = @@cipher.update(binary_data) << @@cipher.final
134 144
      str.force_encoding(Encoding::UTF_8)
135
      str end
145
      str
146
    rescue StandardError => exception
147
      chi_fatal_alert <<~"EOS"
148
暗号の復号時にエラーが起きました。
149
mikutterがアップデートしたり、
150
システムのOpenSSLがアップデートされたりした場合にこのエラーが起きた場合は、
151
~/.mikutter/settings/setting.ymlからaccount_cryptで始まるものを消して、
152
~/.mikutter/settings/core/tokenファイルを消して、
153
アカウントを再認証すると上手くいく可能性があります。
154

  
155
#{exception.inspect}
156
EOS
157
    end
136 158

  
137 159
    private
138 160

  
(2-2/6)