The runtime transaction for session key update receive a blob of opaque key trait where individual keys could be enumerated by the key type id.
https://github.com/paritytech/substrate/blob/2651d5cf410700c8a9bbe1b5df54aa9956926b34/primitives/runtime/src/traits.rs#L1156
As such ownership_proof_is_valid should enumerate the keys, and for any BLS key type, it should call verification of the proof of possession from the BLS library: