syntax = "proto3";
package cert;

option go_package = "github.com/slackhq/nebula/cert";

//import "google/protobuf/timestamp.proto";

enum Curve {
  CURVE25519 = 0;
  P256 = 1;
}

message RawNebulaCertificate {
    RawNebulaCertificateDetails Details = 1;
    bytes Signature = 2;
}

message RawNebulaCertificateDetails {
    string Name = 1;

    // Ips and Subnets are in big endian 32 bit pairs, 1st the ip, 2nd the mask
    repeated uint32 Ips = 2;
    repeated uint32 Subnets = 3;

    repeated string Groups = 4;
    int64 NotBefore = 5;
    int64 NotAfter = 6;
    bytes PublicKey = 7;

    bool IsCA = 8;

    // sha-256 of the issuer certificate, if this field is blank the cert is self-signed
    bytes Issuer = 9;

    Curve curve = 100;
}

message RawNebulaEncryptedData {
	RawNebulaEncryptionMetadata EncryptionMetadata = 1;
	bytes Ciphertext = 2;
}

message RawNebulaEncryptionMetadata {
	string EncryptionAlgorithm = 1;
	RawNebulaArgon2Parameters Argon2Parameters = 2;
}

message RawNebulaArgon2Parameters {
	int32 version = 1; // rune in Go
	uint32 memory = 2;
	uint32 parallelism = 4; // uint8 in Go
	uint32 iterations = 3;
	bytes salt = 5;
}
