syntax = "proto3";
package session;
option go_package = "github.com/nspcc-dev/neofs-proto/session";

import "github.com/gogo/protobuf/gogoproto/gogo.proto";

option (gogoproto.stable_marshaler_all) = true;

message VerificationHeader {
    // PublicKey is a session public key
    bytes PublicKey = 1;
    // KeySignature is a session public key signature. Signed by trusted side
    bytes KeySignature = 2;
}

// User token granting rights for object manipulation
message Token {
    // Header carries verification data of session key
    VerificationHeader Header = 1 [(gogoproto.nullable) = false];
    // OwnerID is an owner of manipulation object
    bytes OwnerID = 2 [(gogoproto.customtype) = "OwnerID", (gogoproto.nullable) = false];
    // FirstEpoch is an initial epoch of token lifetime
    uint64 FirstEpoch = 3;
    // LastEpoch is a last epoch of token lifetime
    uint64 LastEpoch = 4;
    // ObjectID is an object identifier of manipulation object
    repeated bytes ObjectID = 5 [(gogoproto.customtype) = "ObjectID", (gogoproto.nullable) = false];
    // Signature is a token signature, signed by owner of manipulation object
    bytes Signature = 6;
    // ID is a token identifier. valid UUIDv4 represented in bytes
    bytes ID = 7 [(gogoproto.customtype) = "TokenID", (gogoproto.nullable) = false];
}