/** * This private function is called by ndn_TlvEncoder_writeNestedTlv to write the TLVs in the body of the Data value. * @param context This is the DataValueContext struct pointer which was passed to writeTlv. * @param encoder the ndn_TlvEncoder which is calling this. * @return 0 for success, else an error code. */ static ndn_Error encodeDataValue(const void *context, struct ndn_TlvEncoder *encoder) { const struct DataValueContext *dataValueContext = (const struct DataValueContext *)context; const struct ndn_Data *data = dataValueContext->data; ndn_Error error; size_t dummyBeginOffset, dummyEndOffset; *dataValueContext->signedPortionBeginOffset = encoder->offset; if ((error = ndn_encodeTlvName (&data->name, &dummyBeginOffset, &dummyEndOffset, encoder))) return error; if ((error = ndn_TlvEncoder_writeNestedTlv(encoder, ndn_Tlv_MetaInfo, encodeMetaInfoValue, &data->metaInfo, 0))) return error; if ((error = ndn_TlvEncoder_writeBlobTlv(encoder, ndn_Tlv_Content, &data->content))) return error; if ((error = ndn_encodeTlvSignatureInfo(&data->signature, encoder))) return error; *dataValueContext->signedPortionEndOffset = encoder->offset; if ((error = ndn_TlvEncoder_writeBlobTlv(encoder, ndn_Tlv_SignatureValue, &data->signature.signature))) return error; return NDN_ERROR_success; }
ndn_Error ndn_Tlv0_2WireFormat_encodeSignatureInfo (const struct ndn_Signature *signature, struct ndn_DynamicUInt8Array *output, size_t *encodingLength) { ndn_Error error; struct ndn_TlvEncoder encoder; ndn_TlvEncoder_initialize(&encoder, output); error = ndn_encodeTlvSignatureInfo(signature, &encoder); *encodingLength = encoder.offset; return error; }