blob: 9835c6e4b570d36da2294883094b0f985d7117bc [file] [log] [blame]
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
#ifndef DICE_CBOR_WRITER_H_
#define DICE_CBOR_WRITER_H_
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
struct CborOut {
uint8_t* buffer;
size_t size;
size_t offset;
};
// These functions write simple deterministically encoded CBOR tokens to an
// output buffer. If a NULL buffer is provided, nothing is written but the
// offset is still increased and the size returned to allow for measurement of
// the encoded data.
//
// Complex types are constructed from these simple types, see RFC 8949. The
// caller is responsible for correct and deterministic encoding of complex
// types.
//
// If the encoding would overflow the offset or cannot be written to the
// remaining space in non-null buffer, 0 is returned and the output stream must
// be considered corrupted as there may have been a partial update to the
// output.
size_t CborWriteInt(int64_t val, struct CborOut* out);
size_t CborWriteBstr(size_t data_size, const uint8_t* data,
struct CborOut* out);
size_t CborWriteTstr(const char* str, struct CborOut* out);
size_t CborWriteArray(size_t num_elements, struct CborOut* out);
size_t CborWriteMap(size_t num_pairs, struct CborOut* out);
size_t CborWriteFalse(struct CborOut* out);
size_t CborWriteTrue(struct CborOut* out);
size_t CborWriteNull(struct CborOut* out);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // DICE_CBOR_WRITER_H_