syntax = "proto3"; option go_package = "mfer"; import "google/protobuf/timestamp.proto"; message MFFile { enum Version { NONE = 0; ONE = 1; // only one for now } // required mffile root attributes 1xx Version version = 101; bytes innerMessage = 102; // these are used solely to detect corruption/truncation // and not for cryptographic integrity. uint64 size = 103; bytes sha256 = 104; // 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 = 101; uint64 size = 102; // gotta have at least one: repeated MFFileChecksum hashes = 201; // optional per-file metadata optional string mimeType = 301; optional google.protobuf.Timestamp mtime = 302; optional google.protobuf.Timestamp ctime = 303; optional google.protobuf.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 MFFileInner { enum Version { NONE = 0; ONE = 1; // only one for now } Version version = 101; // required manifest attributes: uint64 fileCount = 102; repeated MFFilePath files = 103; // optional manifest attributes 2xx: optional google.protobuf.Timestamp createdAt = 201; }