Program Listing for File basics.h

Return to documentation for file (caprock/basics.h)

/*
 * This file is part of caprock.
 *
 * Author(s): Jens Finkhaeuser <jens@finkhaeuser.de>
 *
 * Copyright (c) 2022 Interpeer gUG (haftungsbeschränkt).
 *
 * SPDX-License-Identifier: GPL-3.0-only
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 **/
#ifndef CAPROCK_BASICS_H
#define CAPROCK_BASICS_H

#include <caprock.h>

#include <caprock/keys.h>

#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

CAPROCK_API extern char const * const CAPROCK_EXPIRY_POLICY_ISSUER;

CAPROCK_API extern char const * const CAPROCK_EXPIRY_POLICY_LOCAL;

CAPROCK_API extern char const * const CAPROCK_CLAIMS_WILDCARD;


CAPROCK_API extern size_t const CAPROCK_IDENTIFIER_MIN_SIZE;
CAPROCK_API extern size_t const CAPROCK_IDENTIFIER_MAX_SIZE;


typedef struct caprock_claim
{
  char const * subject;
  size_t       subject_size;

  char const * predicate;
  size_t       predicate_size;

  char const * object;
  size_t       object_size;
} caprock_claim;


typedef enum {
  CSA_AUTO = 0,
  CSA_RAW  = 1,
  CSA_SHA2 = 2,
  CSA_SHA3 = 3,
} caprock_signature_algorithm;


CAPROCK_API caprock_error_t
caprock_grant_create(
    void * buffer, size_t * bufsize,  // Output buffer
    caprock_key_pair const * issuer,  // Since we need to sign, a key pair.
    uint64_t sequence_no,             // Validity ensured by caller.
    char const * from,                // ISO-8601 as NULL-terminated string
    char const * to,                  // same
    char const * expiry_policy,       // One of the constants above.
    caprock_claim const * claims,     // Array of claims
    size_t claims_size,               // 1 for a single claim.
    caprock_identifier_hash_length issuer_hash_length,
    caprock_signature_algorithm sigalg
);

#define caprock_token_create caprock_grant_create


CAPROCK_API caprock_error_t
caprock_revocation_create(
    void * buffer, size_t * bufsize,  // Output buffer
    caprock_key_pair const * issuer,  // Since we need to sign, a key pair.
    uint64_t sequence_no,             // Validity ensured by caller.
    char const * from,                // ISO-8601 as NULL-terminated string
    char const * to,                  // same
    char const * expiry_policy,       // One of the constants above.
    caprock_claim const * claims,     // Array of claims
    size_t claims_size,               // 1 for a single claim.
    caprock_identifier_hash_length issuer_hash_length,
    caprock_signature_algorithm sigalg
);


CAPROCK_API caprock_error_t
caprock_token_validate(
    void const * token, size_t token_size,  // Serialized token
    char const * now,                       // ISO-8601 current timestamp
    caprock_key const * verifier            // Public key
);


typedef caprock_error_t (*caprock_token_iterator)(
    void * buffer, size_t * bufsize,
    void * baton
);

typedef enum caprock_validation_flags
{
  CIF_NONE                  = 0x00,
  CIF_IGNORE_OUT_OF_ORDER   = 0x01,
  CIF_IGNORE_GAPS           = 0x02,
  CIF_IGNORE_FAILED_SIG     = 0x04,
  CIF_ALL = CIF_IGNORE_OUT_OF_ORDER
    | CIF_IGNORE_GAPS
    | CIF_IGNORE_FAILED_SIG
    // TODO add flags as needed
} caprock_validation_flags;

CAPROCK_API caprock_error_t
caprock_claim_validate(
    caprock_claim const * claims,     // Array of claims
    size_t claims_size,               // 1 for a single claim.
    char const * now,                 // ISO-8601 current timestamp
    void * buffer, size_t bufsize,    // Buffer for temporarily holding tokens
    caprock_token_iterator iterator,  // Tokens to process
    void * iterator_baton,            // Baton for the iterator; can be NULL
    caprock_key const * verifier,     // Public key
    int flags                         // Flags
);


CAPROCK_API caprock_error_t
caprock_issuer_from_token(
    void * issuer_buffer, size_t * issuer_buffer_size,
    void const * token_buffer, size_t token_buffer_size
);


CAPROCK_API caprock_error_t
caprock_create_object_id(void * buffer, size_t * bufsize,
    char const * name, size_t name_size,
    caprock_identifier_hash_length hash_length);

#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus

#endif // guard