code: func open(buf []byte, passphrase string) (map[string]string, error) {
  	salt := make([]byte, saltLength)
  	copy(salt, buf[:saltLength])
  	var nonce [nonceLength]byte
  	copy(nonce[:], buf[saltLength:nonceLength+saltLength])
  	secretKey := deriveKey(passphrase, salt)
  	decrypted, ok := secretbox.Open(nil, buf[nonceLength+saltLength:], &nonce, &secretKey)
  	if !ok {
  		return nil, fmt.Errorf("failed to decrypt")
  	}
  	data := map[string]string{}
  	if err := json.Unmarshal(decrypted, &data); err != nil {
  		return nil, err
  	}
  	return data, nil
  }
docs: // open will try to unseal the given buffer