コード例 #1
0
ファイル: mixclient.go プロジェクト: JonathanLogan/mute
// ReceiveFromMix decrypts a message received from the mix
func ReceiveFromMix(receiveTemplate nymaddr.AddressTemplate, MailboxAddress, msg []byte) (decMessage, Nym []byte, err error) {
	if len(msg) < 2 {
		return nil, nil, ErrTooShort
	}
	headerLen := int(binary.BigEndian.Uint16(msg[0:2]))
	if len(msg) < 2+headerLen {
		return nil, nil, ErrTooShort
	}
	headerContent := msg[2 : 2+headerLen]
	nym, secret, err := receiveTemplate.GetPrivate(headerContent, MailboxAddress)
	if err != nil {
		return nil, nil, err
	}
	nonce := sha256.Sum256(headerContent)
	decMessage, err = GCMDecrypt(nonce[:], secret, msg[2+headerLen:])
	if err != nil {
		return nil, nil, err
	}
	return decMessage, nym, nil
}