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
|