/// <summary> /// Append a SignatureInfo to the Interest name, sign the name components and /// append a final name component with the signature bits. /// </summary> /// /// <param name="interest"></param> /// <param name="certificateName">The certificate name of the key to use for signing.</param> /// <param name="wireFormat">A WireFormat object used to encode the input.</param> public void signInterestByCertificate(Interest interest, Name certificateName, WireFormat wireFormat) { 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(), net.named_data.jndn.security.certificate.IdentityCertificate .certificateNameToPublicKeyName(certificateName), digestAlgorithm[0])); // Remove the empty signature and append the real one. interest.setName(interest.getName().getPrefix(-1) .append(wireFormat.encodeSignatureValue(signature))); }
/// <summary> /// 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). /// </summary> /// /// <param name="interest"></param> /// <param name="wireFormat">A WireFormat object used to encode the input.</param> public 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 = net.named_data.jndn.util.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))); }