// decodeMsg is the actual YAMN message decoder. It's output is always a // pooled file, either in the Inbound or Outbound queue. func decodeMsg(rawMsg []byte, secret *keymgr.Secring) (err error) { // At this point, rawMsg should always be messageBytes in length err = lenCheck(len(rawMsg), messageBytes) if err != nil { Error.Println(err) return } d := newDecMessage(rawMsg) // Extract the top header header := newDecodeHeader(d.getHeader()) recipientKeyID := header.getRecipientKeyID() recipientSK, err := secret.GetSK(recipientKeyID) if err != nil { Warn.Printf("Failed to ascertain Recipient SK: %s", err) return } header.setRecipientSK(recipientSK) slotDataBytes, packetVersion, err := header.decode() if err != nil { Warn.Printf("Header decode failed: %s", err) return } switch packetVersion { case 2: err = decodeV2(d, slotDataBytes) return default: err = fmt.Errorf( "Cannot decode packet version %d", packetVersion, ) return } return }