Пример #1
0
  /**
   * Append a SignatureInfo for DigestSha256 to the Interest name, digest the name components and
   * append a final name component with the signature bits (which is the digest).
   *
   * @param interest The Interest object to be signed. This appends name components of SignatureInfo
   *     and the signature bits.
   * @param wireFormat A WireFormat object used to encode the input.
   */
  public final void signInterestWithSha256(Interest interest, WireFormat wireFormat) {
    DigestSha256Signature signature = new DigestSha256Signature();
    // Append the encoded SignatureInfo.
    interest.getName().append(wireFormat.encodeSignatureInfo(signature));

    // Append an empty signature so that the "signedPortion" is correct.
    interest.getName().append(new Name.Component());
    // Encode once to get the signed portion.
    SignedBlob encoding = interest.wireEncode(wireFormat);

    // Digest and set the signature.
    byte[] signedPortionDigest = Common.digestSha256(encoding.signedBuf());
    signature.setSignature(new Blob(signedPortionDigest, false));

    // Remove the empty signature and append the real one.
    interest.setName(
        interest.getName().getPrefix(-1).append(wireFormat.encodeSignatureValue(signature)));
  }
Пример #2
0
  /**
   * Append a SignatureInfo to the Interest name, sign the name components and append a final name
   * component with the signature bits.
   *
   * @param interest The Interest object to be signed. This appends name components of SignatureInfo
   *     and the signature bits.
   * @param certificateName The certificate name of the key to use for signing.
   * @param wireFormat A WireFormat object used to encode the input.
   */
  public final void signInterestByCertificate(
      Interest interest, Name certificateName, WireFormat wireFormat) throws SecurityException {
    DigestAlgorithm[] digestAlgorithm = new DigestAlgorithm[1];
    Signature signature = makeSignatureByCertificate(certificateName, digestAlgorithm);

    // Append the encoded SignatureInfo.
    interest.getName().append(wireFormat.encodeSignatureInfo(signature));

    // Append an empty signature so that the "signedPortion" is correct.
    interest.getName().append(new Name.Component());
    // Encode once to get the signed portion, and sign.
    SignedBlob encoding = interest.wireEncode(wireFormat);
    signature.setSignature(
        privateKeyStorage_.sign(
            encoding.signedBuf(),
            IdentityCertificate.certificateNameToPublicKeyName(certificateName),
            digestAlgorithm[0]));

    // Remove the empty signature and append the real one.
    interest.setName(
        interest.getName().getPrefix(-1).append(wireFormat.encodeSignatureValue(signature)));
  }
Пример #3
0
 /**
  * Sign data packet based on the certificate name. Use the default
  * WireFormat.getDefaultWireFormat().
  *
  * @param data The Data object to sign and update its signature.
  * @param certificateName The Name identifying the certificate which identifies the signing key.
  */
 public final void signByCertificate(Data data, Name certificateName) throws SecurityException {
   signByCertificate(data, certificateName, WireFormat.getDefaultWireFormat());
 }
Пример #4
0
 /**
  * Append a timestamp component and a random value component to interest's name. This ensures that
  * the timestamp is greater than the timestamp used in the previous call. Then use keyChain to
  * sign the interest which appends a SignatureInfo component and a component with the signature
  * bits. If the interest lifetime is not set, this sets it. Use the default WireFormat to encode
  * the SignatureInfo and to encode interest name for signing.
  *
  * @param interest The interest whose name is append with components.
  * @param keyChain The KeyChain for calling sign.
  * @param certificateName The certificate name of the key to use for signing.
  */
 public void generate(Interest interest, KeyChain keyChain, Name certificateName)
     throws SecurityException {
   generate(interest, keyChain, certificateName, WireFormat.getDefaultWireFormat());
 }