示例#1
0
func (p *point) Mul(ca abstract.Point, cs abstract.Scalar) abstract.Point {

	// Convert the scalar to fixed-length little-endian form.
	sb := cs.(*nist.Int).V.Bytes()
	shi := len(sb) - 1
	var b [32]byte
	for i := range sb {
		b[shi-i] = sb[i]
	}

	if ca == nil {
		// Optimized multiplication by precomputed base point
		C.ge_scalarmult_base(&p.p, (*C.uchar)(unsafe.Pointer(&b[0])))
	} else {
		// General scalar multiplication
		a := ca.(*point)
		C.ge_scalarmult(&p.p, (*C.uchar)(unsafe.Pointer(&b[0])), &a.p)
	}
	return p
}
示例#2
0
func (p *point) Base() abstract.Point {

	// Way to kill a fly with a sledgehammer...
	C.ge_scalarmult_base(&p.p, (*C.uchar)(unsafe.Pointer(&s1.b[0])))
	return p
}