/// <summary>
 /// Look in the IdentityStorage or pibImpl for the public key with the name in the
 /// KeyLocator (if available). If the public key can't be found, return an
 /// empty Blob.
 /// </summary>
 ///
 /// <param name="keyLocator">The KeyLocator.</param>
 /// <param name="failureReason"></param>
 /// <returns>The public key DER or an empty Blob if not found.</returns>
 private Blob getPublicKeyDer(KeyLocator keyLocator, String[] failureReason)
 {
     if (keyLocator.getType() == net.named_data.jndn.KeyLocatorType.KEYNAME &&
         identityStorage_ != null)
     {
         Name keyName;
         try {
             // Assume the key name is a certificate name.
             keyName = net.named_data.jndn.security.certificate.IdentityCertificate
                       .certificateNameToPublicKeyName(keyLocator.getKeyName());
         } catch (Exception ex) {
             failureReason[0] = "Cannot get a public key name from the certificate named: "
                                + keyLocator.getKeyName().toUri();
             return(new Blob());
         }
         try {
             // Assume the key name is a certificate name.
             return(identityStorage_.getKey(keyName));
         } catch (SecurityException ex_0) {
             failureReason[0] = "The identityStorage doesn't have the key named "
                                + keyName.toUri();
             return(new Blob());
         }
     }
     else if (keyLocator.getType() == net.named_data.jndn.KeyLocatorType.KEYNAME &&
              pibImpl_ != null)
     {
         try {
             return(pibImpl_.getKeyBits(keyLocator.getKeyName()));
         } catch (Pib.Error ex_1) {
             failureReason[0] = "The pibImpl doesn't have the key named "
                                + keyLocator.getKeyName().toUri();
             return(new Blob());
         } catch (PibImpl.Error ex_2) {
             failureReason[0] = "Error getting the key named "
                                + keyLocator.getKeyName().toUri();
             return(new Blob());
         }
     }
     else
     {
         // Can't find a key to verify.
         failureReason[0] = "The signature KeyLocator doesn't have a key name";
         return(new Blob());
     }
 }
Exemplo n.º 2
0
        // TODO: getExtension

        /// <summary>
        /// Write a string representation of this certificate to result.
        /// </summary>
        ///
        /// <param name="result">The StringBuffer to write to.</param>
        public void printCertificate(StringBuilder result)
        {
            result.append("Certificate name:\n");
            result.append("  ").append(getName().toUri()).append("\n");
            result.append("Validity:\n");
            result.append("  NotBefore: ")
            .append(net.named_data.jndn.encrypt.Schedule
                    .toIsoString(getValidityPeriod().getNotBefore()))
            .append("\n");
            result.append("  NotAfter: ")
            .append(net.named_data.jndn.encrypt.Schedule.toIsoString(getValidityPeriod().getNotAfter()))
            .append("\n");

            // TODO: Print the extension.

            result.append("Public key bits:\n");
            try {
                result.append(net.named_data.jndn.util.Common.base64Encode(getPublicKey()
                                                                           .getImmutableArray(), true));
            } catch (CertificateV2.Error ex) {
                // No public key.
            }

            result.append("Signature Information:\n");
            result.append("  Signature Type: ");
            if (getSignature()  is  Sha256WithEcdsaSignature)
            {
                result.append("SignatureSha256WithEcdsa\n");
            }
            else if (getSignature()  is  Sha256WithRsaSignature)
            {
                result.append("SignatureSha256WithRsa\n");
            }
            else
            {
                result.append("<unknown>\n");
            }

            if (net.named_data.jndn.KeyLocator.canGetFromSignature(getSignature()))
            {
                result.append("  Key Locator: ");
                KeyLocator keyLocator = net.named_data.jndn.KeyLocator.getFromSignature(getSignature());
                if (keyLocator.getType() == net.named_data.jndn.KeyLocatorType.KEYNAME)
                {
                    if (keyLocator.getKeyName().equals(getKeyName()))
                    {
                        result.append("Self-Signed ");
                    }

                    result.append("Name=").append(keyLocator.getKeyName().toUri())
                    .append("\n");
                }
                else
                {
                    result.append("<no KeyLocator key name>\n");
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// A helper method for getKeyLocatorName.
        /// </summary>
        ///
        private static Name getKeyLocatorNameFromSignature(Signature signatureInfo,
                                                           ValidationState state)
        {
            if (!net.named_data.jndn.KeyLocator.canGetFromSignature(signatureInfo))
            {
                state.fail(new ValidationError(net.named_data.jndn.security.v2.ValidationError.INVALID_KEY_LOCATOR,
                                               "KeyLocator is missing"));
                return(new Name());
            }

            KeyLocator keyLocator = net.named_data.jndn.KeyLocator.getFromSignature(signatureInfo);

            if (keyLocator.getType() != net.named_data.jndn.KeyLocatorType.KEYNAME)
            {
                state.fail(new ValidationError(net.named_data.jndn.security.v2.ValidationError.INVALID_KEY_LOCATOR,
                                               "KeyLocator type is not Name"));
                return(new Name());
            }

            return(keyLocator.getKeyName());
        }
 /// <summary>
 /// Look in the IdentityStorage for the public key with the name in the
 /// KeyLocator (if available). If the public key can't be found, return and
 /// empty Blob.
 /// </summary>
 ///
 /// <param name="keyLocator">The KeyLocator.</param>
 /// <returns>The public key DER or an empty Blob if not found.</returns>
 private Blob getPublicKeyDer(KeyLocator keyLocator)
 {
     if (keyLocator.getType() == net.named_data.jndn.KeyLocatorType.KEYNAME &&
         identityStorage_ != null)
     {
         try {
             // Assume the key name is a certificate name.
             return(identityStorage_
                    .getKey(net.named_data.jndn.security.certificate.IdentityCertificate
                            .certificateNameToPublicKeyName(keyLocator
                                                            .getKeyName())));
         } catch (SecurityException ex) {
             // The storage doesn't have the key.
             return(new Blob());
         }
     }
     else
     {
         // Can't find a key to verify.
         return(new Blob());
     }
 }
Exemplo n.º 5
0
        dumpData(Data data)
        {
            Console.Out.WriteLine("name: " + data.getName().toUri());
            if (data.getContent().size() > 0)
            {
                Console.Out.Write("content (raw): ");
                var buf = data.getContent().buf();
                while (buf.remaining() > 0)
                {
                    Console.Out.Write((char)buf.get());
                }
                Console.Out.WriteLine("");
                Console.Out.WriteLine("content (hex): " + data.getContent().toHex());
            }
            else
            {
                Console.Out.WriteLine("content: <empty>");
            }

            if (!(data.getMetaInfo().getType() == ContentType.BLOB))
            {
                Console.Out.Write("metaInfo.type: ");
                if (data.getMetaInfo().getType() == ContentType.KEY)
                {
                    Console.Out.WriteLine("KEY");
                }
                else if (data.getMetaInfo().getType() == ContentType.LINK)
                {
                    Console.Out.WriteLine("LINK");
                }
                else if (data.getMetaInfo().getType() == ContentType.NACK)
                {
                    Console.Out.WriteLine("NACK");
                }
                else if (data.getMetaInfo().getType() == ContentType.OTHER_CODE)
                {
                    Console.Out.WriteLine("other code " + data.getMetaInfo().getOtherTypeCode());
                }
            }
            Console.Out.WriteLine("metaInfo.freshnessPeriod (milliseconds): " +
                                  (data.getMetaInfo().getFreshnessPeriod() >= 0 ?
                                   "" + data.getMetaInfo().getFreshnessPeriod() : "<none>"));
            Console.Out.WriteLine("metaInfo.finalBlockId: " +
                                  (data.getMetaInfo().getFinalBlockId().getValue().size() > 0 ?
                                   data.getMetaInfo().getFinalBlockId().getValue().toHex() : "<none>"));

            KeyLocator keyLocator = null;

            if (data.getSignature() is Sha256WithRsaSignature)
            {
                var signature = (Sha256WithRsaSignature)data.getSignature();
                Console.Out.WriteLine("Sha256WithRsa signature.signature: " +
                                      (signature.getSignature().size() > 0 ?
                                       signature.getSignature().toHex() : "<none>"));
                keyLocator = signature.getKeyLocator();
            }
            else if (data.getSignature() is Sha256WithEcdsaSignature)
            {
                var signature = (Sha256WithEcdsaSignature)data.getSignature();
                Console.Out.WriteLine("Sha256WithEcdsa signature.signature: " +
                                      (signature.getSignature().size() > 0 ?
                                       signature.getSignature().toHex() : "<none>"));
                keyLocator = signature.getKeyLocator();
            }
            else if (data.getSignature() is HmacWithSha256Signature)
            {
                var signature = (HmacWithSha256Signature)data.getSignature();
                Console.Out.WriteLine("HmacWithSha256 signature.signature: " +
                                      (signature.getSignature().size() > 0 ?
                                       signature.getSignature().toHex() : "<none>"));
                keyLocator = signature.getKeyLocator();
            }
            else if (data.getSignature() is DigestSha256Signature)
            {
                var signature = (DigestSha256Signature)data.getSignature();
                Console.Out.WriteLine("DigestSha256 signature.signature: " +
                                      (signature.getSignature().size() > 0 ?
                                       signature.getSignature().toHex() : "<none>"));
            }
            else if (data.getSignature() is GenericSignature)
            {
                var signature = (GenericSignature)data.getSignature();
                Console.Out.WriteLine("Generic signature.signature: " +
                                      (signature.getSignature().size() > 0 ?
                                       signature.getSignature().toHex() : "<none>"));
                Console.Out.WriteLine("  Type code: " + signature.getTypeCode() + " signatureInfo: " +
                                      (signature.getSignatureInfoEncoding().size() > 0 ?
                                       signature.getSignatureInfoEncoding().toHex() : "<none>"));
            }
            if (keyLocator != null)
            {
                Console.Out.Write("signature.keyLocator: ");
                if (keyLocator.getType() == KeyLocatorType.NONE)
                {
                    Console.Out.WriteLine("<none>");
                }
                else if (keyLocator.getType() == KeyLocatorType.KEY_LOCATOR_DIGEST)
                {
                    Console.Out.WriteLine("KeyLocatorDigest: " + keyLocator.getKeyData().toHex());
                }
                else if (keyLocator.getType() == KeyLocatorType.KEYNAME)
                {
                    Console.Out.WriteLine("KeyName: " + keyLocator.getKeyName().toUri());
                }
                else
                {
                    Console.Out.WriteLine("<unrecognized ndn_KeyLocatorType>");
                }
            }
        }