Module: MTProto::Crypto::MessageKey

Defined in:
lib/mtproto/crypto/message_key.rb

Class Method Summary collapse

Class Method Details

.derive_aes_key_iv(auth_key, msg_key, sender: :client) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/mtproto/crypto/message_key.rb', line 19

def derive_aes_key_iv(auth_key, msg_key, sender: :client)
  x = sender == :client ? 0 : 8

  sha256_a = Digest::SHA256.digest(msg_key + auth_key[x, 36])
  sha256_b = Digest::SHA256.digest(auth_key[40 + x, 36] + msg_key)

  aes_key = sha256_a[0, 8] + sha256_b[8, 16] + sha256_a[24, 8]
  aes_iv = sha256_b[0, 8] + sha256_a[8, 16] + sha256_b[24, 8]

  { aes_key: aes_key, aes_iv: aes_iv }
end

.generate_msg_key(auth_key, plaintext, sender: :client) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/mtproto/crypto/message_key.rb', line 10

def generate_msg_key(auth_key, plaintext, sender: :client)
  x = sender == :client ? 0 : 8
  auth_key_part = auth_key[88 + x, 32]

  sha256_a = Digest::SHA256.digest(auth_key_part + plaintext)

  sha256_a[8, 16]
end