Project

General

Profile

Actions

Task #1934

closed

Provide stateful digest

Added by Yingdi Yu over 9 years ago. Updated over 9 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Security
Target version:
Start date:
Due date:
% Done:

90%

Estimated time:

Description

Digest may be calculated in two ways: 1) calculate a digest on a determined input; 2) update the digest with dynamic input.

For now, ndn-cxx only supports the first style. Given digest may be widely used in NDN applications, it might be useful to support both styles (e.g., the second style is needed by ChronoSync based applications).

The second style can be abstracted as a StatefulDigest which can be continuously updated until a finalize call is made. A pseudo code should look like:

StatefulDigest digest;
digest.update(input1, size1);
digest.update(input2, size2);
digest.update(input3, size3);
...
ConstBufferPtr result = digest.getDigest();
Actions #1

Updated by Junxiao Shi over 9 years ago

  • Start date deleted (08/25/2014)

It's better to avoid the term finalize in this context.
The usual meaning of a finalize method is to free resources (similar to a destructor).

I suggest following Python hashlib API:

partial class StatefulDigest
{
  /** \brief append a block of input
   */
  void update(const void* input, size_t size);

  /** \brief compute digest on input
   *
   *  This can be invoked after zero or more .update() calls.
   *  .update() is not allowed after .computeDigest() is called.
   */
  ConstBufferPtr computeDigest();

  /** \brief clear input and digest
   *
   *  After this call, the object is same as a newly constructed object.
   */
  void reset();
};
Actions #2

Updated by Yingdi Yu over 9 years ago

Actually, finalize is not necessary, it is implicitly called in getDigest(), I will hide it from public interface.

Actions #3

Updated by Yingdi Yu over 9 years ago

  • Description updated (diff)
Actions #4

Updated by Yingdi Yu over 9 years ago

  • Description updated (diff)
Actions #5

Updated by Alex Afanasyev over 9 years ago

I wouldn't call it "StatefulDigest". It is standard way how digest is calculated, so I would name it simply "Digest". It could have a static member to get digest from a single memory block.

Actions #6

Updated by Alex Afanasyev over 9 years ago

  • Status changed from Code review to Closed
Actions

Also available in: Atom PDF