package container // SysAttributePrefix is a prefix of key to system attribute. const SysAttributePrefix = "__SYSTEM__" const ( // SysAttributeSubnet is a string ID of container's storage subnet. SysAttributeSubnet = SysAttributePrefix + "SUBNET" // SysAttributeName is a string of human-friendly container name registered as the domain in NNS contract. SysAttributeName = SysAttributePrefix + "NAME" // SysAttributeZone is a string of zone for container name. SysAttributeZone = SysAttributePrefix + "ZONE" // SysAttributeHomomorphicHashing is a container's homomorphic hashing state. SysAttributeHomomorphicHashing = SysAttributePrefix + "DISABLE_HOMOMORPHIC_HASHING" ) // SysAttributePrefixNeoFS is a prefix of key to system attribute. // Deprecated: use SysAttributePrefix const SysAttributePrefixNeoFS = "__NEOFS__" const ( // SysAttributeSubnetNeoFS is a string ID of container's storage subnet. // Deprecated: use SysAttributeSubnet SysAttributeSubnetNeoFS = SysAttributePrefixNeoFS + "SUBNET" // SysAttributeNameNeoFS is a string of human-friendly container name registered as the domain in NNS contract. // Deprecated: use SysAttributeName SysAttributeNameNeoFS = SysAttributePrefixNeoFS + "NAME" // SysAttributeZoneNeoFS is a string of zone for container name. // Deprecated: use SysAttributeZone SysAttributeZoneNeoFS = SysAttributePrefixNeoFS + "ZONE" // SysAttributeHomomorphicHashingNeoFS is a container's homomorphic hashing state. // Deprecated: use SysAttributeHomomorphicHashing SysAttributeHomomorphicHashingNeoFS = SysAttributePrefixNeoFS + "DISABLE_HOMOMORPHIC_HASHING" ) // SysAttributeZoneDefault is a default value for SysAttributeZone attribute. const SysAttributeZoneDefault = "container" const disabledHomomorphicHashingValue = "true" // HomomorphicHashingState returns container's homomorphic // hashing state: // - true if hashing is enabled; // - false if hashing is disabled. // // All container's attributes must be unique, otherwise behavior // is undefined. // // See also SetHomomorphicHashingState. func (c Container) HomomorphicHashingState() bool { for i := range c.attr { if c.attr[i].GetKey() == SysAttributeHomomorphicHashing || c.attr[i].GetKey() == SysAttributeHomomorphicHashingNeoFS { return c.attr[i].GetValue() != disabledHomomorphicHashingValue } } return true } // SetHomomorphicHashingState sets homomorphic hashing state for // container. // // All container's attributes must be unique, otherwise behavior // is undefined. // // See also HomomorphicHashingState. func (c *Container) SetHomomorphicHashingState(enable bool) { for i := range c.attr { if c.attr[i].GetKey() == SysAttributeHomomorphicHashing || c.attr[i].GetKey() == SysAttributeHomomorphicHashingNeoFS { if enable { // approach without allocation/waste // coping works since the attributes // order is not important c.attr[i] = c.attr[len(c.attr)-1] c.attr = c.attr[:len(c.attr)-1] } else { c.attr[i].SetValue(disabledHomomorphicHashingValue) } return } } if !enable { attr := Attribute{} attr.SetKey(SysAttributeHomomorphicHashing) attr.SetValue(disabledHomomorphicHashingValue) c.attr = append(c.attr, attr) } }