func NewAgent(agentID []byte, accessKey *security.ManagedKey) (*Agent, error) { if accessKey.Encrypted() { return nil, security.ErrKeyMustBeDecrypted } iv := make([]byte, accessKey.KeySize()) if _, err := rand.Read(iv); err != nil { return nil, err } if agentID == nil { agentID = make([]byte, AgentIDSize) if _, err := rand.Read(agentID); err != nil { return nil, err } } var ( mac [16]byte key [32]byte ) copy(key[:], accessKey.Plaintext) poly1305.Sum(&mac, iv, &key) agent := &Agent{ ID: agentID, IV: iv, MAC: mac[:], Created: time.Now(), } return agent, nil }