Guardtime KSI c SDK
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
Data Structures | Macros | Typedefs | Functions
Tree Builder

Data Structures

struct  KSI_TreeNode_st
 
struct  KSI_TreeBuilderLeafProcessor_st
 
struct  KSI_TreeBuilderLeafProcessor_list_st
 
struct  KSI_TreeBuilder_st
 
struct  KSI_TreeLeafHandle_list_st
 

Macros

#define KSI_TREE_BUILDER_STACK_LEN   0x100
 
#define KSI_TreeBuilderLeafProcessorList_append(lst, o)   KSI_APPLY_TO_NOT_NULL((lst), append, ((lst), (o)))
 
#define KSI_TreeBuilderLeafProcessorList_remove(lst, pos, o)   KSI_APPLY_TO_NOT_NULL((lst), removeElement, ((lst), (pos), (o)))
 
#define KSI_TreeBuilderLeafProcessorList_indexOf(lst, o, i)   KSI_APPLY_TO_NOT_NULL((lst), indexOf, ((lst), (o), (i)))
 
#define KSI_TreeBuilderLeafProcessorList_insertAt(lst, pos, o)   KSI_APPLY_TO_NOT_NULL((lst), insertAt, ((lst), (pos), (o)))
 
#define KSI_TreeBuilderLeafProcessorList_replaceAt(lst, pos, o)   KSI_APPLY_TO_NOT_NULL((lst), replaceAt, ((lst), (pos), (o)))
 
#define KSI_TreeBuilderLeafProcessorList_elementAt(lst, pos, o)   KSI_APPLY_TO_NOT_NULL((lst), elementAt, ((lst), (pos), (o)))
 
#define KSI_TreeBuilderLeafProcessorList_length(lst)   (((lst) != NULL && (lst)->length != NULL) ? (lst)->length((lst)) : 0)
 
#define KSI_TreeBuilderLeafProcessorList_sort(lst, cmp)   KSI_APPLY_TO_NOT_NULL((lst), sort, ((lst), (cmp)))
 
#define KSI_TreeBuilderLeafProcessorList_foldl(lst, foldCtx, foldFn)   (((lst) != NULL) ? ( ((lst)->foldl != NULL) ? ((lst)->foldl((lst), (foldCtx), (foldFn)))) : KSI_INVALID_STATE) : KSI_OK)
 
#define KSI_TreeBuilderLeafProcessorList_find(lst, o, f, i)   KSI_APPLY_TO_NOT_NULL((lst), find, ((lst), (o), (f), (i)))
 
#define KSI_TreeLeafHandleList_append(lst, o)   KSI_APPLY_TO_NOT_NULL((lst), append, ((lst), (o)))
 
#define KSI_TreeLeafHandleList_remove(lst, pos, o)   KSI_APPLY_TO_NOT_NULL((lst), removeElement, ((lst), (pos), (o)))
 
#define KSI_TreeLeafHandleList_indexOf(lst, o, i)   KSI_APPLY_TO_NOT_NULL((lst), indexOf, ((lst), (o), (i)))
 
#define KSI_TreeLeafHandleList_insertAt(lst, pos, o)   KSI_APPLY_TO_NOT_NULL((lst), insertAt, ((lst), (pos), (o)))
 
#define KSI_TreeLeafHandleList_replaceAt(lst, pos, o)   KSI_APPLY_TO_NOT_NULL((lst), replaceAt, ((lst), (pos), (o)))
 
#define KSI_TreeLeafHandleList_elementAt(lst, pos, o)   KSI_APPLY_TO_NOT_NULL((lst), elementAt, ((lst), (pos), (o)))
 
#define KSI_TreeLeafHandleList_length(lst)   (((lst) != NULL && (lst)->length != NULL) ? (lst)->length((lst)) : 0)
 
#define KSI_TreeLeafHandleList_sort(lst, cmp)   KSI_APPLY_TO_NOT_NULL((lst), sort, ((lst), (cmp)))
 
#define KSI_TreeLeafHandleList_foldl(lst, foldCtx, foldFn)   (((lst) != NULL) ? ( ((lst)->foldl != NULL) ? ((lst)->foldl((lst), (foldCtx), (foldFn)))) : KSI_INVALID_STATE) : KSI_OK)
 
#define KSI_TreeLeafHandleList_find(lst, o, f, i)   KSI_APPLY_TO_NOT_NULL((lst), find, ((lst), (o), (f), (i)))
 

Typedefs

typedef struct KSI_TreeNode_st KSI_TreeNode
 
typedef struct
KSI_TreeBuilderLeafProcessor_st 
KSI_TreeBuilderLeafProcessor
 
typedef struct
KSI_TreeBuilderLeafProcessor_list_st 
KSI_TreeBuilderLeafProcessorList
 
typedef struct
KSI_TreeLeafHandle_st 
KSI_TreeLeafHandle
 
typedef struct
KSI_TreeLeafHandle_list_st 
KSI_TreeLeafHandleList
 
typedef struct KSI_TreeBuilder_st KSI_TreeBuilder
 

Functions

int KSI_TreeBuilderLeafProcessorList_new (KSI_TreeBuilderLeafProcessorList **list)
 
void KSI_TreeBuilderLeafProcessorList_free (KSI_TreeBuilderLeafProcessorList *list)
 
int KSI_TreeLeafHandleList_new (KSI_TreeLeafHandleList **list)
 
void KSI_TreeLeafHandleList_free (KSI_TreeLeafHandleList *list)
 
KSI_TreeLeafHandleKSI_TreeLeafHandle_ref (KSI_TreeLeafHandle *o)
 
int KSI_TreeNode_new (KSI_CTX *ctx, KSI_DataHash *hash, KSI_MetaData *metaData, int level, KSI_TreeNode **node)
 
void KSI_TreeNode_free (KSI_TreeNode *node)
 
void KSI_TreeLeafHandle_free (KSI_TreeLeafHandle *handle)
 
int KSI_TreeLeafHandle_getAggregationChain (const KSI_TreeLeafHandle *handle, KSI_AggregationHashChain **chain)
 
int KSI_TreeLeafHandle_getTreeNode (const KSI_TreeLeafHandle *handle, KSI_TreeNode **node)
 
int KSI_TreeBuilder_new (KSI_CTX *ctx, KSI_HashAlgorithm algo, KSI_TreeBuilder **builder)
 
void KSI_TreeBuilder_free (KSI_TreeBuilder *builder)
 
int KSI_TreeBuilder_addDataHash (KSI_TreeBuilder *builder, KSI_DataHash *hsh, int level, KSI_TreeLeafHandle **leaf)
 
int KSI_TreeBuilder_addMetaData (KSI_TreeBuilder *builder, KSI_MetaData *metaData, int level, KSI_TreeLeafHandle **leaf)
 
int KSI_TreeBuilder_close (KSI_TreeBuilder *builder)
 

Detailed Description

The tree builder is used to create an aggregation tree locally. This can be used to create multiple signatures with a single aggregation request.

Macro Definition Documentation

#define KSI_TREE_BUILDER_STACK_LEN   0x100
#define KSI_TreeBuilderLeafProcessorList_append (   lst,
 
)    KSI_APPLY_TO_NOT_NULL((lst), append, ((lst), (o)))
#define KSI_TreeBuilderLeafProcessorList_elementAt (   lst,
  pos,
 
)    KSI_APPLY_TO_NOT_NULL((lst), elementAt, ((lst), (pos), (o)))
#define KSI_TreeBuilderLeafProcessorList_find (   lst,
  o,
  f,
 
)    KSI_APPLY_TO_NOT_NULL((lst), find, ((lst), (o), (f), (i)))
#define KSI_TreeBuilderLeafProcessorList_foldl (   lst,
  foldCtx,
  foldFn 
)    (((lst) != NULL) ? ( ((lst)->foldl != NULL) ? ((lst)->foldl((lst), (foldCtx), (foldFn)))) : KSI_INVALID_STATE) : KSI_OK)
#define KSI_TreeBuilderLeafProcessorList_indexOf (   lst,
  o,
 
)    KSI_APPLY_TO_NOT_NULL((lst), indexOf, ((lst), (o), (i)))
#define KSI_TreeBuilderLeafProcessorList_insertAt (   lst,
  pos,
 
)    KSI_APPLY_TO_NOT_NULL((lst), insertAt, ((lst), (pos), (o)))
#define KSI_TreeBuilderLeafProcessorList_length (   lst)    (((lst) != NULL && (lst)->length != NULL) ? (lst)->length((lst)) : 0)
#define KSI_TreeBuilderLeafProcessorList_remove (   lst,
  pos,
 
)    KSI_APPLY_TO_NOT_NULL((lst), removeElement, ((lst), (pos), (o)))
#define KSI_TreeBuilderLeafProcessorList_replaceAt (   lst,
  pos,
 
)    KSI_APPLY_TO_NOT_NULL((lst), replaceAt, ((lst), (pos), (o)))
#define KSI_TreeBuilderLeafProcessorList_sort (   lst,
  cmp 
)    KSI_APPLY_TO_NOT_NULL((lst), sort, ((lst), (cmp)))
#define KSI_TreeLeafHandleList_append (   lst,
 
)    KSI_APPLY_TO_NOT_NULL((lst), append, ((lst), (o)))
#define KSI_TreeLeafHandleList_elementAt (   lst,
  pos,
 
)    KSI_APPLY_TO_NOT_NULL((lst), elementAt, ((lst), (pos), (o)))
#define KSI_TreeLeafHandleList_find (   lst,
  o,
  f,
 
)    KSI_APPLY_TO_NOT_NULL((lst), find, ((lst), (o), (f), (i)))
#define KSI_TreeLeafHandleList_foldl (   lst,
  foldCtx,
  foldFn 
)    (((lst) != NULL) ? ( ((lst)->foldl != NULL) ? ((lst)->foldl((lst), (foldCtx), (foldFn)))) : KSI_INVALID_STATE) : KSI_OK)
#define KSI_TreeLeafHandleList_indexOf (   lst,
  o,
 
)    KSI_APPLY_TO_NOT_NULL((lst), indexOf, ((lst), (o), (i)))
#define KSI_TreeLeafHandleList_insertAt (   lst,
  pos,
 
)    KSI_APPLY_TO_NOT_NULL((lst), insertAt, ((lst), (pos), (o)))
#define KSI_TreeLeafHandleList_length (   lst)    (((lst) != NULL && (lst)->length != NULL) ? (lst)->length((lst)) : 0)
#define KSI_TreeLeafHandleList_remove (   lst,
  pos,
 
)    KSI_APPLY_TO_NOT_NULL((lst), removeElement, ((lst), (pos), (o)))
#define KSI_TreeLeafHandleList_replaceAt (   lst,
  pos,
 
)    KSI_APPLY_TO_NOT_NULL((lst), replaceAt, ((lst), (pos), (o)))
#define KSI_TreeLeafHandleList_sort (   lst,
  cmp 
)    KSI_APPLY_TO_NOT_NULL((lst), sort, ((lst), (cmp)))

Typedef Documentation

An object for building an aggregation tree on the fly.

The leaf processor structure contains the function to pre processes the node specified as the input and a context for the preprocessor. The function may alter the input node and optionally generate a new one - usually meaning the input hash has been aggregated and the output node is the root value of the aggregation.

typedef struct KSI_TreeLeafHandle_st KSI_TreeLeafHandle

The tree leaf handle is used to generate an aggregation hash chain for a specific leaf added to the tree builder.

typedef struct KSI_TreeNode_st KSI_TreeNode

A structure to represent the leaf and internal nodes of a hash tree.

Function Documentation

int KSI_TreeBuilder_addDataHash ( KSI_TreeBuilder builder,
KSI_DataHash hsh,
int  level,
KSI_TreeLeafHandle **  leaf 
)

Adds a new leaf to the tree.

Parameters
[in]builderThe builder.
[in]hshThe data hash of the leaf.
[in]levelThe level of the leaf.
[out]leafPointer to the receiving pointer for the handle.
Returns
On success returns KSI_OK, otherwise a status code is returned (see KSI_StatusCode).
See also
KSI_TreeLeafHandle_free
int KSI_TreeBuilder_addMetaData ( KSI_TreeBuilder builder,
KSI_MetaData metaData,
int  level,
KSI_TreeLeafHandle **  leaf 
)

Adds a new leaf to the tree containing a meta-data value instead of the data hash as in KSI_TreeBuilder_addDataHash.

Parameters
[in]builderThe builder.
[in]metaDataThe meta-data of the leaf.
[in]levelThe level of the leaf.
[out]leafPointer to the receiving pointer for the handle.
Returns
On success returns KSI_OK, otherwise a status code is returned (see KSI_StatusCode).
See also
KSI_TreeLeafHandle_free
int KSI_TreeBuilder_close ( KSI_TreeBuilder builder)

This function finalizes the building of the tree. After calling this function no more leafs may be added to the computation and doing so would result in an error.

Parameters
[in]builderThe builder.
Returns
On success returns KSI_OK, otherwise a status code is returned (see KSI_StatusCode).
void KSI_TreeBuilder_free ( KSI_TreeBuilder builder)

Destructor for the KSI_TreeBuilder object.

Parameters
[in]builderPointer to the object.
See also
KSI_TreeNuilder_new
int KSI_TreeBuilder_new ( KSI_CTX ctx,
KSI_HashAlgorithm  algo,
KSI_TreeBuilder **  builder 
)

Constructor for the KSI_TreeBuilder object.

Parameters
[in]ctxKSI context.
[in]algoAlgorithm used for the internal nodes.
[out]builderPointer to the receiving pointer.
Returns
On success returns KSI_OK, otherwise a status code is returned (see KSI_StatusCode).
See also
KSI_TreeBuilder_free
void KSI_TreeBuilderLeafProcessorList_free ( KSI_TreeBuilderLeafProcessorList list)
int KSI_TreeBuilderLeafProcessorList_new ( KSI_TreeBuilderLeafProcessorList **  list)
void KSI_TreeLeafHandle_free ( KSI_TreeLeafHandle handle)

Free the tree leaf handle.

Parameters
[in]handleThe tree leaf handle.
See also
KSI_TreeBuilder_addDataHash and KSI_TreeBuilder_addMetaData
int KSI_TreeLeafHandle_getAggregationChain ( const KSI_TreeLeafHandle handle,
KSI_AggregationHashChain **  chain 
)

Generates an aggregation hash chain starting from the added leaf that the tree leaf handle is based on. The resulting object must be feed by the caller.

Parameters
[in]handleThe tree leaf handle.
[out]chainPointer to the receiving pointer.
Returns
On success returns KSI_OK, otherwise a status code is returned (see KSI_StatusCode).
See also
KSI_AggregationHashChain_free.
int KSI_TreeLeafHandle_getTreeNode ( const KSI_TreeLeafHandle handle,
KSI_TreeNode **  node 
)
KSI_TreeLeafHandle* KSI_TreeLeafHandle_ref ( KSI_TreeLeafHandle o)
void KSI_TreeLeafHandleList_free ( KSI_TreeLeafHandleList list)
int KSI_TreeLeafHandleList_new ( KSI_TreeLeafHandleList **  list)
void KSI_TreeNode_free ( KSI_TreeNode node)

Destructor method for KSI_TreeNode.

Parameters
[in]nodePointer to the object.
int KSI_TreeNode_new ( KSI_CTX ctx,
KSI_DataHash hash,
KSI_MetaData metaData,
int  level,
KSI_TreeNode **  node 
)

This is the constructor method for the KSI_TreeNode structure.

Parameters
[in]ctxKSI context.
[in]hashInput hash.
[in]metaDataMetadata field.
[in]levelThe level of the tree node.
[out]nodePointer to the receiving ponter.
Returns
On success returns KSI_OK, otherwise a status code is returned (see KSI_StatusCode).
Note
Exactly one of hash or metaData must be a not NULL pointer.
The function will not take ownership of the hash or metaData fields and thus the pointers must be freed by the caller.