Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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);
}