Calculates and returns the key material. A session key must be derived from this key material using a secure key derivation function (KDF). The KDF used to derive the key is handled externally (i.e. not by {@link JPAKEParticipant}).
The keying material will be identical for each participant if and only if each participant's password is the same. i.e. If the participants do not share the same password, then each participant will derive a different key. Therefore, if you immediately start using a key derived from the keying material, then you must handle detection of incorrect keys. If you want to handle this detection explicitly, you can optionally perform rounds 3 and 4. See {@link JPAKEParticipant} for details on how to executerounds 3 and 4.
The keying material will be in the range
[0, p-1].
{@link #validateRound2PayloadReceived(JPAKERound2Payload)} must be called prior to this method.
As a side effect, the internal {@link #password} array is cleared, since it is no longer needed.
After execution, the {@link #getState() state} will be {@link #STATE_KEY_CALCULATED}.
@throws IllegalStateException if called prior to {@link #validateRound2PayloadReceived(JPAKERound2Payload)}, or if called multiple times.