package mitm import ( "crypto/x509/pkix" "github.com/hashicorp/hcl/v2" ) const ( DefaultCommonName = "Styx Certificate Authority" DefaultDays = 3 ) type Config struct { CA *CAConfig `hcl:"ca,block"` Key *KeyConfig `hcl:"key,block"` Cache *CacheConfig `hcl:"cache,block"` } type CAConfig struct { Cert string `hcl:"cert"` Key string `hcl:"key,optional"` Days int `hcl:"days,optional"` KeyType string `hcl:"key_type,optional"` Bits int `hcl:"bits,optional"` Name string `hcl:"name,optional"` Country string `hcl:"country,optional"` Organization string `hcl:"organization,optional"` Unit string `hcl:"unit,optional"` Locality string `hcl:"locality,optional"` Province string `hcl:"province,optional"` Address []string `hcl:"address,optional"` PostalCode string `hcl:"postal_code,optional"` } func (config CAConfig) DN() pkix.Name { var name = pkix.Name{ CommonName: config.Name, StreetAddress: config.Address, } if config.Name == "" { name.CommonName = DefaultCommonName } if config.Country != "" { name.Country = append(name.Country, config.Country) } if config.Organization != "" { name.Organization = append(name.Organization, config.Organization) } if config.Unit != "" { name.OrganizationalUnit = append(name.OrganizationalUnit, config.Unit) } if config.Locality != "" { name.Locality = append(name.Locality, config.Locality) } if config.Province != "" { name.Province = append(name.Province, config.Province) } if config.PostalCode != "" { name.PostalCode = append(name.PostalCode, config.PostalCode) } return name } type KeyConfig struct { Type string `hcl:"type,optional"` Bits int `hcl:"bits,optional"` Pool int `hcl:"pool,optional"` } var defaultKeyConfig = KeyConfig{ Type: "rsa", Bits: 2048, Pool: 5, } type CacheConfig struct { Type string `hcl:"type"` Body hcl.Body `hcl:",remain"` } type MemoryCacheConfig struct { Size int `hcl:"size,optional"` } type DiskCacheConfig struct { Path string `hcl:"path"` Expire float64 `hcl:"expire,optional"` }