Class: MLKEM::Core::MLKEMInternal
- Inherits:
-
Object
- Object
- MLKEM::Core::MLKEMInternal
- Defined in:
- lib/ml_kem/core/ml_kem_internal.rb
Overview
Internal implementation of ML-KEM (Kyber) encapsulation and decapsulation algorithms. Wraps K-PKE logic and adds hashing and key derivation per ML-KEM specification.
Algorithms implemented:
-
Algorithm 16: ML-KEM.KeyGen_internal
-
Algorithm 17: ML-KEM.Encaps_internal
-
Algorithm 18: ML-KEM.Decaps_internal
Instance Method Summary collapse
-
#decaps_internal(dk, c) ⇒ String
ML-KEM Decapsulation (Algorithm 18).
-
#encaps_internal(ek, m) ⇒ Array<String>
ML-KEM Encapsulation (Algorithm 17).
-
#initialize(k, eta1, eta2, du, dv) ⇒ MLKEMInternal
constructor
Constructs the internal ML-KEM engine.
-
#keygen_internal(d, z) ⇒ Array<String>
ML-KEM Key Generation (Algorithm 16).
Constructor Details
#initialize(k, eta1, eta2, du, dv) ⇒ MLKEMInternal
Constructs the internal ML-KEM engine.
22 23 24 25 26 27 28 29 30 |
# File 'lib/ml_kem/core/ml_kem_internal.rb', line 22 def initialize(k, eta1, eta2, du, dv) @k = k @eta1 = eta1 @eta2 = eta2 @du = du @dv = dv @q = Constants::Q @kpke = KPKE.new(@k, @eta1, @eta2, @du, @dv, @q) end |
Instance Method Details
#decaps_internal(dk, c) ⇒ String
ML-KEM Decapsulation (Algorithm 18).
69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/ml_kem/core/ml_kem_internal.rb', line 69 def decaps_internal(dk, c) dk_pke = dk[0...(384 * @k)] ek_pke = dk[(384 * @k)...(768 * @k + 32)] h_val = dk[(768 * @k + 32)...(768 * @k + 64)] z = dk[(768 * @k + 64)...(768 * @k + 96)] mp = @kpke.decrypt(dk_pke, c) kp, rp = Crypto::SymmetricPrimitives.g(mp + h_val) kk = Crypto::SymmetricPrimitives.j(z + c) cp = @kpke.encrypt(ek_pke, mp, rp) c == cp ? kp : kk end |
#encaps_internal(ek, m) ⇒ Array<String>
ML-KEM Encapsulation (Algorithm 17).
55 56 57 58 59 |
# File 'lib/ml_kem/core/ml_kem_internal.rb', line 55 def encaps_internal(ek, m) k, r = Crypto::SymmetricPrimitives.g(m + Crypto::SymmetricPrimitives.h(ek)) c = @kpke.encrypt(ek, m, r) [k, c] end |
#keygen_internal(d, z) ⇒ Array<String>
ML-KEM Key Generation (Algorithm 16).
40 41 42 43 44 45 |
# File 'lib/ml_kem/core/ml_kem_internal.rb', line 40 def keygen_internal(d, z) ek_pke, dk_pke = @kpke.keygen(d) ek = ek_pke dk = dk_pke + ek + Crypto::SymmetricPrimitives.h(ek) + z [ek, dk] end |