Class: PqcRails::KeySource::EnvCredentials
- Inherits:
-
Object
- Object
- PqcRails::KeySource::EnvCredentials
- Defined in:
- lib/pqc_rails/key_source.rb
Overview
ENV/Rails credentialsから現行鍵・旧鍵世代を読み込むデフォルトの鍵ソース。
Session::KeyManagerとActiveRecord::KeyProviderは、鍵の取得元をこのクラスのインスタンスに
委譲する。#current_keypair/#previous_keypairsという2メソッドさえ実装すれば、
将来HSM/PKCS#11経由の鍵ソースにも差し替えられる(実装はしないが、この分離だけで済むように
しておく、というPhase4での抽象化)。
旧鍵世代は、ENVではカンマ区切りの文字列、credentialsでは配列として持たせる(ENVは 文字列しか持てないため)。世代数に上限は設けない。ローテーション完了後は運用側が previous_env_var/previous_credentials_keyを空にすることで旧鍵を無効化する。
Instance Method Summary collapse
- #current_keypair ⇒ Object
-
#initialize(env_var:, previous_env_var:, credentials_key:, previous_credentials_key:, label:) ⇒ EnvCredentials
constructor
A new instance of EnvCredentials.
- #previous_keypairs ⇒ Object
Constructor Details
#initialize(env_var:, previous_env_var:, credentials_key:, previous_credentials_key:, label:) ⇒ EnvCredentials
63 64 65 66 67 68 69 |
# File 'lib/pqc_rails/key_source.rb', line 63 def initialize(env_var:, previous_env_var:, credentials_key:, previous_credentials_key:, label:) @env_var = env_var @previous_env_var = previous_env_var @credentials_key = credentials_key @previous_credentials_key = previous_credentials_key @label = label end |
Instance Method Details
#current_keypair ⇒ Object
71 72 73 |
# File 'lib/pqc_rails/key_source.rb', line 71 def current_keypair KeySource.fetch_keypair!(env_var: @env_var, credentials_key: @credentials_key, label: @label) end |
#previous_keypairs ⇒ Object
75 76 77 78 79 80 81 |
# File 'lib/pqc_rails/key_source.rb', line 75 def previous_keypairs raw = KeySource.fetch(env_var: @previous_env_var, credentials_key: @previous_credentials_key) return [] if raw.nil? entries = raw.is_a?(::Array) ? raw : raw.split(",") entries.map { |encoded| KeySource.decode(encoded.strip) } end |