ndn_Error ndn_decodeTlvData (struct ndn_Data *data, size_t *signedPortionBeginOffset, size_t *signedPortionEndOffset, struct ndn_TlvDecoder *decoder) { ndn_Error error; size_t endOffset; size_t dummyBeginOffset, dummyEndOffset; if ((error = ndn_TlvDecoder_readNestedTlvsStart(decoder, ndn_Tlv_Data, &endOffset))) return error; *signedPortionBeginOffset = decoder->offset; if ((error = ndn_decodeTlvName (&data->name, &dummyBeginOffset, &dummyEndOffset, decoder))) return error; if ((error = decodeMetaInfo(&data->metaInfo, decoder))) return error; if ((error = ndn_TlvDecoder_readBlobTlv(decoder, ndn_Tlv_Content, &data->content))) return error; if ((error = ndn_decodeTlvSignatureInfo(&data->signature, decoder))) return error; *signedPortionEndOffset = decoder->offset; if ((error = ndn_TlvDecoder_readBlobTlv(decoder, ndn_Tlv_SignatureValue, &data->signature.signature))) return error; if ((error = ndn_TlvDecoder_finishNestedTlvs(decoder, endOffset))) return error; return NDN_ERROR_success; }
ndn_Error ndn_Tlv0_2WireFormat_decodeSignatureInfoAndValue (struct ndn_Signature *signature, const uint8_t *signatureInfo, size_t signatureInfoLength, const uint8_t *signatureValue, size_t signatureValueLength) { ndn_Error error; struct ndn_TlvDecoder decoder; ndn_TlvDecoder_initialize(&decoder, signatureInfo, signatureInfoLength); if ((error = ndn_decodeTlvSignatureInfo(signature, &decoder))) return error; ndn_TlvDecoder_initialize(&decoder, signatureValue, signatureValueLength); return ndn_TlvDecoder_readBlobTlv (&decoder, ndn_Tlv_SignatureValue, &signature->signature); }