const ( // PrivateKeySize is a size of cSIDH/512 private key in bytes. PrivateKeySize = 37 // PublicKeySize is a size of cSIDH/512 public key in bytes. PublicKeySize = 64 // SharedSecretSize is a size of cSIDH/512 shared secret in bytes. = 64 )
func DeriveSecret(out *[64]byte, pub *PublicKey, prv *PrivateKey, rng io.Reader) bool
DeriveSecret computes a cSIDH shared secret. If successful, returns true and fills 'out' with shared secret. Function returns false in case 'pub' is invalid. More precisely, shared secret is a Montgomery coefficient A of a secret curve y^2 = x^3 + Ax^2 + x, computed by applying action of a prv.e on a curve represented by pub.a.
func GeneratePrivateKey(key *PrivateKey, rng io.Reader) error
func GeneratePublicKey(pub *PublicKey, prv *PrivateKey, rng io.Reader)
func Validate(pub *PublicKey, rng io.Reader) bool
Validate returns true if 'pub' is a valid cSIDH public key, otherwise false. More precisely, the function verifies that curve
y^2 = x^3 + pub.a * x^2 + x
is supersingular.
Defines operations on private key
type PrivateKey struct {
// contains filtered or unexported fields
}
func (c PrivateKey) Export(out []byte) bool
func (c *PrivateKey) Import(key []byte) bool
Defines operations on public key
type PublicKey struct {
// contains filtered or unexported fields
}
func (c *PublicKey) Export(out []byte) bool
Assumes key is exported as encoded in Montgomery domain.
func (c *PublicKey) Import(key []byte) bool
Assumes key is in Montgomery domain.