/// <summary> /// Get the keyLocatorName and timestamp from the command interest. /// </summary> /// /// <param name="interest">The Interest to parse.</param> /// <param name="state">On error, this calls state.fail and returns false.</param> /// <param name="keyLocatorName">Set keyLocatorName[0] to the KeyLocator name.</param> /// <param name="timestamp_0"></param> /// <returns>On success, return true. On error, call state.fail and return false.</returns> private static bool parseCommandInterest(Interest interest, ValidationState state, Name[] keyLocatorName, double[] timestamp_0) { keyLocatorName[0] = new Name(); timestamp_0[0] = 0; Name name = interest.getName(); if (name.size() < net.named_data.jndn.security.CommandInterestSigner.MINIMUM_SIZE) { state.fail(new ValidationError(net.named_data.jndn.security.v2.ValidationError.POLICY_ERROR, "Command interest name `" + interest.getName().toUri() + "` is too short")); return(false); } timestamp_0[0] = name.get(net.named_data.jndn.security.CommandInterestSigner.POS_TIMESTAMP).toNumber(); keyLocatorName[0] = net.named_data.jndn.security.v2.ValidationPolicy.getKeyLocatorName(interest, state); if (state.isOutcomeFailed()) { // Already failed. return(false); } return(true); }
public override void checkPolicy(Interest interest, ValidationState state, ValidationPolicy.ValidationContinuation continueValidation) { Name keyName = net.named_data.jndn.security.v2.ValidationPolicy.getKeyLocatorName(interest, state); if (state.isOutcomeFailed()) { // Already called state.fail() . return; } checkPolicyHelper(keyName, state, continueValidation); }
public override void checkPolicy(Interest interest, ValidationState state, ValidationPolicy.ValidationContinuation continueValidation) { if (hasInnerPolicy()) { throw new ValidatorConfigError( "ValidationPolicyConfig must be a terminal inner policy"); } if (shouldBypass_) { continueValidation.continueValidation(null, state); return; } Name keyLocatorName = net.named_data.jndn.security.v2.ValidationPolicy.getKeyLocatorName(interest, state); if (state.isOutcomeFailed()) { // Already called state.fail() . return; } for (int i = 0; i < interestRules_.Count; ++i) { ConfigRule rule = interestRules_[i]; if (rule.match(true, interest.getName())) { if (rule.check(true, interest.getName(), keyLocatorName, state)) { continueValidation .continueValidation(new CertificateRequest( new Interest(keyLocatorName)), state); return; } else { // rule.check failed and already called state.fail() . return; } } } state.fail(new ValidationError(net.named_data.jndn.security.v2.ValidationError.POLICY_ERROR, "No rule matched for interest `" + interest.getName().toUri() + "`")); }
public override void checkPolicy(Interest interest, ValidationState state, ValidationPolicy.ValidationContinuation continueValidation) { Name keyLocatorName = net.named_data.jndn.security.v2.ValidationPolicy.getKeyLocatorName(interest, state); if (state.isOutcomeFailed()) { // Already called state.fail().) return; } if (keyLocatorName.getPrefix(-2).isPrefixOf(interest.getName())) { continueValidation.continueValidation(new CertificateRequest( new Interest(keyLocatorName)), state); } else { state.fail(new ValidationError(net.named_data.jndn.security.v2.ValidationError.INVALID_KEY_LOCATOR, "Interest signing policy violation for " + interest.getName().toUri() + " by " + keyLocatorName.toUri())); } }