Swift implementation of ristretto255 (Internet-Draft). Mostly a port of curve25519-dalek. Experimental, do not use.
let secretAlice = Scalar.random()
let publicAlice = Element(generatorTimes: secretAlice)
let sharedSecret = secretAlice * publicBob
let secretBob = Scalar.random()
let publicBob = Element(generatorTimes: secretBob)
let sharedSecret = secretBob * publicAlice
let secretStatic = Scalar.random()
let publicStatic = Element(generatorTimes: secretStatic)
let secretEphemeral = Scalar.random()
let publicEphemeral = Element(generatorTimes: secretEphemeral)
let c = Scalar(fromUniformBytes: hash(publicStatic.encoded(), publicEphemeral.encoded(), message))
let t = secretEphemeral + c * secretStatic
let c = Scalar(fromUniformBytes: hash(publicStatic.encoded(), publicEphemeral.encoded(), message))
let lhs = Element(generatorTimes: t)
let rhs = c * publicStatic + publicEphemeral
assert(lhs == rhs) // true