Module: Melos::KeySchedule

Extended by:
KeySchedule
Included in:
KeySchedule
Defined in:
lib/melos/key_schedule.rb

Instance Method Summary collapse

Instance Method Details

#epoch_secret(suite, joiner_secret, psk_secret, group_context) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'lib/melos/key_schedule.rb', line 32

def epoch_secret(suite, joiner_secret, psk_secret, group_context)
  Melos::Crypto.expand_with_label(
    suite,
    Melos::Crypto.kdf_extract(suite, joiner_secret, psk_secret),
    "epoch",
    group_context.raw,
    suite.kdf.n_h
  )
end

#joiner_secret(suite, init_secret, commit_secret, group_context) ⇒ Object



6
7
8
9
10
11
12
13
14
# File 'lib/melos/key_schedule.rb', line 6

def joiner_secret(suite, init_secret, commit_secret, group_context)
  Melos::Crypto.expand_with_label(
    suite,
    Melos::Crypto.kdf_extract(suite, init_secret, commit_secret),
    "joiner",
    group_context.raw,
    suite.kdf.n_h
  )
end

#welcome_key_and_nonce(suite, joiner_secret, psk_secret) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/melos/key_schedule.rb', line 24

def welcome_key_and_nonce(suite, joiner_secret, psk_secret)
  ws = welcome_secret(suite, joiner_secret, psk_secret)
  [
    Melos::Crypto.expand_with_label(suite, ws, "key",   "", suite.hpke.n_k),
    Melos::Crypto.expand_with_label(suite, ws, "nonce", "", suite.hpke.n_n)
  ]
end

#welcome_secret(suite, joiner_secret, psk_secret) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/melos/key_schedule.rb', line 16

def welcome_secret(suite, joiner_secret, psk_secret)
  Melos::Crypto.derive_secret(
    suite,
    Melos::Crypto.kdf_extract(suite, joiner_secret, psk_secret), # sometimes written as `member_secret`
    "welcome"
  )
end