func CreateKXMessageNACL(context *ackp.SecKey, rnd []byte, peerPubkey, myPrivkey *[32]byte, channel, myNick, peerNick []byte) (out []byte, err error) { /* lets build our header */ myHdr, intHdr, err := BuildHeader([]byte(msgHdrKX)) if err != nil { return nil, &acutl.AcError{Value: -1, Msg: "CreateKXMessageNACL().BuildHeader(): ", Err: err} } // Open the key context.RndKey(rnd) //fmt.Fprintf(os.Stderr, "CREATE KX KEY: %s\n", hex.EncodeToString(context.key[:])) // first let's compress myBody, err := acutl.CompressData(context.GetKey()) if err != nil { return nil, &acutl.AcError{Value: -2, Msg: "CreateKXMessageNACL().CompressData(): ", Err: err} } // Close the key context.RndKey(rnd) //fmt.Fprintf(os.Stderr, "channel: %s context.bob: %s\n", channel, context.bob) kx_channel := IsChannelOrPriv(channel, myNick, peerNick) // XXX i can probably use context.bob instead of a specific channel specification... //BuildNonceAC(inonce uint32, bob, mynick, myhdr []byte) (nonce []byte, noncebyte *[24]byte, err error) _, noncebyte, err := BuildNonceKX(context.GetNonce(), kx_channel, myNick, peerNick, myHdr) //fmt.Fprintf(os.Stderr, "peerpk : %p myprivkey: %p\n", peerPubkey, myPrivkey) // XXX TODO: need serious cleanup and error checking!! //fmt.Fprintf(os.Stderr, "body.Bytes(): %p, noncebyte: %p, peerPub: %p myPriv: %p\n", myBody, &noncebyte, peerPubkey, myPrivkey) cipherKex := box.Seal(nil, myBody, noncebyte, peerPubkey, myPrivkey) //func packMessageKX(hdr, nonce *uint32, dst, blob *[]byte) (out []byte, err error) { out, err = packMessageKX(&intHdr, context.GetNonce(), peerNick, cipherKex) if err != nil { return nil, &acutl.AcError{Value: -3, Msg: "CreateKXMessageNACL().packMessageKX(): ", Err: err} } //context.nonce++ context.IncNonce(0) return }