Module: PqcRails::KeySource
- Defined in:
- lib/pqc_rails/key_source.rb
Overview
環境変数→Rails credentialsの順で鍵を読み込み、HybridKem::Keypairへデコードするまでの 共通処理。Session::KeyManagerとActiveRecord::KeyProviderで同じ手順(fetch→無ければ例外→decode) が必要になるため共通化している。環境変数を優先するのは本番運用でcredentialsファイルを 使わずに鍵を渡せるようにするため(コンテナのsecret注入等と相性が良い)。
Defined Under Namespace
Classes: EnvCredentials
Class Method Summary collapse
- .credentials_value(credentials_key) ⇒ Object
- .decode(encoded) ⇒ Object
-
.encode(keypair) ⇒ Object
HybridKem::Keypairのシリアライズ形式。セッション固有の処理ではなく鍵の保存形式そのものなので、 Session::KeyManagerではなくここに置く(セッション/AR両方から使われる)。.
- .fetch(env_var:, credentials_key:) ⇒ Object
-
.fetch!(env_var:, credentials_key:, label:) ⇒ Object
fetchした値がnilならMissingKeyErrorを送出する版。.
-
.fetch_keypair!(env_var:, credentials_key:, label:) ⇒ Object
fetch! + decodeまでを1回で行う。Session::KeyManager#keypairとActiveRecord::KeyProvider#keypairの 両方が同じ「fetch→無ければ例外→decode」という処理列を重複実装していたため、ここに統合した。.
Class Method Details
.credentials_value(credentials_key) ⇒ Object
35 36 37 38 39 |
# File 'lib/pqc_rails/key_source.rb', line 35 def credentials_value(credentials_key) return nil unless Rails.respond_to?(:application) && Rails.application Rails.application.credentials[credentials_key] end |
.decode(encoded) ⇒ Object
47 48 49 50 |
# File 'lib/pqc_rails/key_source.rb', line 47 def decode(encoded) public_key, secret_key = BlobPacking.unpack(Base64.strict_decode64(encoded)) HybridKem::Keypair.new(public_key, secret_key) end |
.encode(keypair) ⇒ Object
HybridKem::Keypairのシリアライズ形式。セッション固有の処理ではなく鍵の保存形式そのものなので、 Session::KeyManagerではなくここに置く(セッション/AR両方から使われる)。
43 44 45 |
# File 'lib/pqc_rails/key_source.rb', line 43 def encode(keypair) Base64.strict_encode64(BlobPacking.pack(keypair.public_key, keypair.secret_key)) end |
.fetch(env_var:, credentials_key:) ⇒ Object
18 19 20 |
# File 'lib/pqc_rails/key_source.rb', line 18 def fetch(env_var:, credentials_key:) ENV.fetch(env_var, nil) || credentials_value(credentials_key) end |
.fetch!(env_var:, credentials_key:, label:) ⇒ Object
fetchした値がnilならMissingKeyErrorを送出する版。
23 24 25 26 27 |
# File 'lib/pqc_rails/key_source.rb', line 23 def fetch!(env_var:, credentials_key:, label:) fetch(env_var: env_var, credentials_key: credentials_key) || raise(MissingKeyError, "PQC #{label} key not found. Set ENV['#{env_var}'] or run `rails generate pqc_rails:install`.") end |
.fetch_keypair!(env_var:, credentials_key:, label:) ⇒ Object
fetch! + decodeまでを1回で行う。Session::KeyManager#keypairとActiveRecord::KeyProvider#keypairの 両方が同じ「fetch→無ければ例外→decode」という処理列を重複実装していたため、ここに統合した。
31 32 33 |
# File 'lib/pqc_rails/key_source.rb', line 31 def fetch_keypair!(env_var:, credentials_key:, label:) decode(fetch!(env_var: env_var, credentials_key: credentials_key, label: label)) end |