/// <summary> /// Validates the payload received from the other participant during round 3. /// /// See JPakeParticipant for more details on round 3. /// /// After execution, the State state will be STATE_ROUND_3_VALIDATED. /// /// Throws CryptoException if validation fails. Throws InvalidOperationException if called prior to /// CalculateKeyingMaterial or multiple times /// </summary> /// <param name="round3PayloadReceived">The round 3 payload received from the other participant.</param> /// <param name="keyingMaterial">The keying material as returned from CalculateKeyingMaterial().</param> public virtual void ValidateRound3PayloadReceived(JPakeRound3Payload round3PayloadReceived, BigInteger keyingMaterial) { if (this.state >= STATE_ROUND_3_VALIDATED) { throw new InvalidOperationException("Validation already attempted for round 3 payload for " + this.participantId); } if (this.state < STATE_KEY_CALCULATED) { throw new InvalidOperationException("Keying material must be calculated prior to validating round 3 payload for " + this.participantId); } JPakeUtilities.ValidateParticipantIdsDiffer(participantId, round3PayloadReceived.ParticipantId); JPakeUtilities.ValidateParticipantIdsEqual(this.partnerParticipantId, round3PayloadReceived.ParticipantId); JPakeUtilities.ValidateMacTag( this.participantId, this.partnerParticipantId, this.gx1, this.gx2, this.gx3, this.gx4, keyingMaterial, this.digest, round3PayloadReceived.MacTag); // Clear the rest of the fields. this.gx1 = null; this.gx2 = null; this.gx3 = null; this.gx4 = null; this.state = STATE_ROUND_3_VALIDATED; }
public virtual void ValidateRound3PayloadReceived(JPakeRound3Payload round3PayloadReceived, BigInteger keyingMaterial) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) if (state >= STATE_ROUND_3_VALIDATED) { throw new InvalidOperationException("Validation already attempted for round 3 payload for " + participantId); } if (state < STATE_KEY_CALCULATED) { throw new InvalidOperationException("Keying material must be calculated prior to validating round 3 payload for " + participantId); } JPakeUtilities.ValidateParticipantIdsDiffer(participantId, round3PayloadReceived.ParticipantId); JPakeUtilities.ValidateParticipantIdsEqual(partnerParticipantId, round3PayloadReceived.ParticipantId); JPakeUtilities.ValidateMacTag(participantId, partnerParticipantId, gx1, gx2, gx3, gx4, keyingMaterial, digest, round3PayloadReceived.MacTag); gx1 = null; gx2 = null; gx3 = null; gx4 = null; state = STATE_ROUND_3_VALIDATED; }
/// <summary> /// Validates the payload received from the other participant during round 3. /// /// See JPakeParticipant for more details on round 3. /// /// After execution, the State state will be STATE_ROUND_3_VALIDATED. /// /// Throws CryptoException if validation fails. Throws InvalidOperationException if called prior to /// CalculateKeyingMaterial or multiple times /// </summary> /// <param name="round3PayloadReceived">The round 3 payload received from the other participant.</param> /// <param name="keyingMaterial">The keying material as returned from CalculateKeyingMaterial().</param> public virtual void ValidateRound3PayloadReceived(JPakeRound3Payload round3PayloadReceived, BigInteger keyingMaterial) { if (this.state >= STATE_ROUND_3_VALIDATED) throw new InvalidOperationException("Validation already attempted for round 3 payload for " + this.participantId); if (this.state < STATE_KEY_CALCULATED) throw new InvalidOperationException("Keying material must be calculated prior to validating round 3 payload for " + this.participantId); JPakeUtilities.ValidateParticipantIdsDiffer(participantId, round3PayloadReceived.ParticipantId); JPakeUtilities.ValidateParticipantIdsEqual(this.partnerParticipantId, round3PayloadReceived.ParticipantId); JPakeUtilities.ValidateMacTag( this.participantId, this.partnerParticipantId, this.gx1, this.gx2, this.gx3, this.gx4, keyingMaterial, this.digest, round3PayloadReceived.MacTag); // Clear the rest of the fields. this.gx1 = null; this.gx2 = null; this.gx3 = null; this.gx4 = null; this.state = STATE_ROUND_3_VALIDATED; }