Signal message keys seem to include an IV. [1] Message keys are generated by passing a chain key through a key derivation function. [2] So you can also expand a shared secret established through Diffie-Hellman.
Someone please correct me if I'm wrong.
[1] https://github.com/signalapp/libsignal-protocol-java/blob/ma...
[2] https://signal.org/docs/specifications/doubleratchet/Set0_1....