syntax = "proto3"; option go_package = "git.eeqj.de/sneak/mfer/mfer"; message Timestamp { int64 seconds = 1; int32 nanos = 2; } message MFFileOuter { enum Version { VERSION_NONE = 0; VERSION_ONE = 1; // only one for now } // required mffile root attributes 1xx Version version = 101; enum CompressionType { COMPRESSION_NONE = 0; COMPRESSION_GZIP = 1; } CompressionType compressionType = 102; // these are used solely to detect corruption/truncation // and not for cryptographic integrity. int64 size = 103; bytes sha256 = 104; bytes innerMessage = 199; // 2xx for optional manifest root attributes // think we might use gosignify instead of gpg: // github.com/frankbraun/gosignify //detached signature, ascii or binary optional bytes signature = 201; //full GPG key id optional bytes signer = 202; //full GPG signing public key, ascii or binary optional bytes signingPubKey = 203; } message MFFilePath { // required attributes: string path = 1; int64 size = 2; // gotta have at least one: repeated MFFileChecksum hashes = 3; // optional per-file metadata optional string mimeType = 301; optional Timestamp mtime = 302; optional Timestamp ctime = 303; optional Timestamp atime = 304; } message MFFileChecksum { // 1.0 golang implementation must write a multihash here // it's ok to only ever use/verify sha256 multihash bytes multiHash = 1; } message MFFile { enum Version { VERSION_NONE = 0; VERSION_ONE = 1; // only one for now } Version version = 100; // required manifest attributes: repeated MFFilePath files = 101; // optional manifest attributes 2xx: optional Timestamp createdAt = 201; }