code: func decryptMessage(key, msg []byte, data []byte) ([]byte, error) {
  	// Get the AES block cipher
  	aesBlock, err := aes.NewCipher(key)
  	if err != nil {
  		return nil, err
  	}
  
  	// Get the GCM cipher mode
  	gcm, err := cipher.NewGCM(aesBlock)
  	if err != nil {
  		return nil, err
  	}
  
  	// Decrypt the message
  	nonce := msg[versionSize : versionSize+nonceSize]
  	ciphertext := msg[versionSize+nonceSize:]
  	plain, err := gcm.Open(nil, nonce, ciphertext, data)
  	if err != nil {
  		return nil, err
  	}
  
  	// Success!
  	return plain, nil
  }
docs: // decryptMessage performs the actual decryption of ciphertext. This is in its
  // own function to allow it to be called on all keys easily.