#ifndef _SEC_SOSMANIFEST_H_
#define _SEC_SOSMANIFEST_H_
#include <corecrypto/ccsha1.h>
#include <CoreFoundation/CFData.h>
#include <CoreFoundation/CFError.h>
__BEGIN_DECLS
enum {
kSOSManifestUnsortedError = 1,
kSOSManifestCreateError = 2,
};
extern CFStringRef kSOSManifestErrorDomain;
typedef struct __OpaqueSOSManifest *SOSManifestRef;
struct SOSDigestVector;
CFTypeID SOSManifestGetTypeID(void);
SOSManifestRef SOSManifestCreateWithBytes(const uint8_t *bytes, size_t len,
CFErrorRef *error);
SOSManifestRef SOSManifestCreateWithDigestVector(struct SOSDigestVector *dv, CFErrorRef *error);
SOSManifestRef SOSManifestCreateWithData(CFDataRef data, CFErrorRef *error);
size_t SOSManifestGetSize(SOSManifestRef m);
size_t SOSManifestGetCount(SOSManifestRef m);
const uint8_t *SOSManifestGetBytePtr(SOSManifestRef m);
CFDataRef SOSManifestGetData(SOSManifestRef m);
const struct SOSDigestVector *SOSManifestGetDigestVector(SOSManifestRef manifest);
bool SOSManifestDiff(SOSManifestRef a, SOSManifestRef b,
SOSManifestRef *a_minus_b, SOSManifestRef *b_minus_a,
CFErrorRef *error);
SOSManifestRef SOSManifestCreateWithPatch(SOSManifestRef base,
SOSManifestRef removals,
SOSManifestRef additions,
CFErrorRef *error);
SOSManifestRef SOSManifestCreateComplement(SOSManifestRef A,
SOSManifestRef B,
CFErrorRef *error);
SOSManifestRef SOSManifestCreateIntersection(SOSManifestRef m1,
SOSManifestRef m2,
CFErrorRef *error);
SOSManifestRef SOSManifestCreateUnion(SOSManifestRef m1,
SOSManifestRef m2,
CFErrorRef *error);
void SOSManifestForEach(SOSManifestRef m, void(^block)(CFDataRef e, bool *stop));
CFDataRef SOSManifestGetDigest(SOSManifestRef m, CFErrorRef *error);
__END_DECLS
#endif