mfer/mfer/mf.proto

79 lines
1.8 KiB
Protocol Buffer
Raw Permalink Normal View History

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