Package x25519 provides an implementation of the X25519 function, which performs scalar multiplication on the elliptic curve known as Curve25519. See RFC 7748.



    View Source
    const (
    	// ScalarSize is the size of the scalar input to X25519.
    	ScalarSize = 32
    	// PointSize is the size of the point input to X25519.
    	PointSize = 32


    View Source
    var Basepoint []byte

      Basepoint is the canonical Curve25519 generator.


      func EdPrivateKeyToX25519

      func EdPrivateKeyToX25519(privateKey ed25519.PrivateKey) []byte

        EdPrivateKeyToX25519 converts an Ed25519 private key into a corresponding X25519 private key such that the resulting X25519 public key will equal the result from EdPublicKeyToX25519.

        func EdPublicKeyToX25519

        func EdPublicKeyToX25519(publicKey ed25519.PublicKey) ([]byte, bool)

          EdPublicKeyToX25519 converts an Ed25519 public key into the X25519 public key that would be generated from the same private key.

          func ScalarBaseMult

          func ScalarBaseMult(dst, in *[32]byte)

            ScalarBaseMult sets dst to the product in*base where dst and base are the x coordinates of group points, base is the standard generator and all values are in little-endian form.

            It is recommended to use the X25519 function with Basepoint instead, as copying into fixed size arrays can lead to unexpected bugs.

            func ScalarMult

            func ScalarMult(dst, in, base *[32]byte)

              ScalarMult sets dst to the product in*base where dst and base are the x coordinates of group points and all values are in little-endian form.

              Deprecated: when provided a low-order point, ScalarMult will set dst to all zeroes, irrespective of the scalar. Instead, use the X25519 function, which will return an error.

              func X25519

              func X25519(scalar, point []byte) ([]byte, error)

                X25519 returns the result of the scalar multiplication (scalar * point), according to RFC 7748, Section 5. scalar, point and the return value are slices of 32 bytes.

                scalar can be generated at random, for example with crypto/rand. point should be either Basepoint or the output of another X25519 call.

                If point is Basepoint (but not if it's a different slice with the same contents) a precomputed implementation might be used for performance.


                This section is empty.

                Source Files