Method: JOSE::JWA::PKCS1#eme_oaep_encode

Defined in:
lib/jose/jwa/pkcs1.rb

#eme_oaep_encode(hash, dm, label, seed, k) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/jose/jwa/pkcs1.rb', line 36

def eme_oaep_encode(hash, dm, label, seed, k)
  if hash.is_a?(String)
    hash = OpenSSL::Digest.new(hash)
  end
  h_len = hash.digest('').bytesize
  m_len = dm.bytesize
  l_hash = hash.digest(label)
  ps_len = (k - m_len - (2 * h_len) - 2)
  ps = if ps_len > 0
    ([0] * ps_len).pack('C*')
  else
    ''
  end
  db = [l_hash, ps, 0x01, dm].pack('a*a*Ca*')
  db_mask = mgf1(hash, seed, k - h_len - 1)
  masked_db = exor(db, db_mask)
  seed_mask = mgf1(hash, masked_db, h_len)
  masked_seed = exor(seed, seed_mask)
  em = [0x00, masked_seed, masked_db].pack('Ca*a*')
  return em
end