// KiSSAnonHandshake does a named KiSS handshake over the given transport, // validating the other end using the given verifier, which may be nil. // // Usually, clients use the anonymous handshake, while servers use the named handshake. func KiSSNamedHandshake(identity natrium.EdDSAPrivate, check Verifier, transport io.ReadWriteCloser) (io.ReadWriteCloser, error) { eph_priv := natrium.ECDHGenerateKey() signat := identity.Sign(eph_priv.PublicKey()) // send NHLO message tosend := kissNamedHello{eph_priv.PublicKey(), signat, identity.PublicKey()} buf := new(bytes.Buffer) err := struc.Pack(buf, &tosend) if err != nil { panic(err.Error()) } packaged := kissSegment{0, kiss_NHLO, buf.Bytes()} return kissFinishHandshake(eph_priv, packaged, check, transport) }