/// <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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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()
                                           + "`"));
        }
예제 #4
0
        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()));
            }
        }