blob: 9533ccbb9f46c970d2e8c210554b168280ef619f [file] [log] [blame]
Jeff Thompson5cae5e52013-07-10 19:41:20 -07001/**
2 * @author: Jeff Thompson
3 * See COPYING for copyright and distribution information.
4 */
5
6#ifndef NDN_KEY_H
Jeff Thompson2d27e2f2013-08-09 12:55:00 -07007#define NDN_KEY_H
Jeff Thompson5cae5e52013-07-10 19:41:20 -07008
Jeff Thompson7329a132013-08-16 15:57:37 -07009#include "name.h"
10
Jeff Thompson2d27e2f2013-08-09 12:55:00 -070011#ifdef __cplusplus
Jeff Thompson5cae5e52013-07-10 19:41:20 -070012extern "C" {
13#endif
14
15typedef enum {
16 ndn_KeyLocatorType_KEY = 1,
17 ndn_KeyLocatorType_CERTIFICATE = 2,
18 ndn_KeyLocatorType_KEYNAME = 3
19} ndn_KeyLocatorType;
Jeff Thompson7329a132013-08-16 15:57:37 -070020
21typedef enum {
22 ndn_KeyNameType_PUBLISHER_PUBLIC_KEY_DIGEST = 1,
23 ndn_KeyNameType_PUBLISHER_CERTIFICATE_DIGEST = 2,
24 ndn_KeyNameType_PUBLISHER_ISSUER_KEY_DIGEST = 3,
25 ndn_KeyNameType_PUBLISHER_ISSUER_CERTIFICATE_DIGEST = 4
26} ndn_KeyNameType;
27
28/**
29 * An ndn_KeyLocator holds the type of key locator and related data.
30 */
Jeff Thompson5cae5e52013-07-10 19:41:20 -070031struct ndn_KeyLocator {
Jeff Thompson7329a132013-08-16 15:57:37 -070032 ndn_KeyLocatorType type; /**< -1 for none */
33 unsigned char *keyData; /**< A pointer to a pre-allocated buffer for the key data as follows:
34 * If type is ndn_KeyLocatorType_KEY, the key data.
35 * If type is ndn_KeyLocatorType_CERTIFICATE, the certificate data.
36 * If type is ndn_KeyLocatorType_KEYNAME and keyNameType is ndn_KeyNameType_PUBLISHER_PUBLIC_KEY_DIGEST, the publisher public key digest.
37 * If type is ndn_KeyLocatorType_KEYNAME and keyNameType is ndn_KeyNameType_PUBLISHER_CERTIFICATE_DIGEST, the publisher certificate digest.
38 * If type is ndn_KeyLocatorType_KEYNAME and keyNameType is ndn_KeyNameType_PUBLISHER_ISSUER_KEY_DIGEST, the publisher issuer key digest.
39 * If type is ndn_KeyLocatorType_KEYNAME and keyNameType is ndn_KeyNameType_PUBLISHER_ISSUER_CERTIFICATE_DIGEST, the publisher issuer certificate digest.
40 */
41 unsigned int keyDataLength; /**< The length of keyData. */
42 struct ndn_Name keyName; /**< The key name (only used if type is ndn_KeyLocatorType_KEYNAME.) */
Jeff Thompson1cf72e92013-08-23 20:38:39 -070043 ndn_KeyNameType keyNameType; /**< The type of data for keyName, -1 for none. (only used if type is ndn_KeyLocatorType_KEYNAME.) */
Jeff Thompson5cae5e52013-07-10 19:41:20 -070044};
45
Jeff Thompson7329a132013-08-16 15:57:37 -070046/**
47 * Initialize an ndn_KeyLocator struct with the pre-allocated nameComponents, and defaults for all the values.
48 * @param self A pointer to the ndn_KeyLocator struct.
49 * @param keyNameComponents The pre-allocated array of ndn_NameComponent.
50 * @param maxKeyNameComponents The number of elements in the allocated keyNameComponents array.
51 */
Jeff Thompsond1427fb2013-08-29 17:20:32 -070052static inline void ndn_KeyLocator_initialize
Jeff Thompson7329a132013-08-16 15:57:37 -070053 (struct ndn_KeyLocator *self, struct ndn_NameComponent *keyNameComponents, unsigned int maxKeyNameComponents) {
Jeff Thompson5cae5e52013-07-10 19:41:20 -070054 self->type = (ndn_KeyLocatorType)-1;
Jeff Thompson63d02692013-08-16 12:09:07 -070055 self->keyData = 0;
56 self->keyDataLength = 0;
Jeff Thompsond1427fb2013-08-29 17:20:32 -070057 ndn_Name_initialize(&self->keyName, keyNameComponents, maxKeyNameComponents);
Jeff Thompson7329a132013-08-16 15:57:37 -070058 self->keyNameType = (ndn_KeyNameType)-1;
Jeff Thompson5cae5e52013-07-10 19:41:20 -070059}
60
Jeff Thompson2d27e2f2013-08-09 12:55:00 -070061#ifdef __cplusplus
Jeff Thompson5cae5e52013-07-10 19:41:20 -070062}
63#endif
64
65#endif