}
/* Construct public key */
- if ( ( rc = elliptic_multiply ( curve, NULL, private,
+ if ( ( rc = elliptic_multiply ( curve, curve->base, private,
public ) ) != 0 ) {
DBGC ( curve, "CURVE %s could not generate public key: %s\n",
curve->name, strerror ( rc ) );
* Multiply curve point by scalar
*
* @v curve Weierstrass curve
- * @v base Base point (or NULL to use generator)
+ * @v base Base point
* @v scalar Scalar multiple
* @v result Result point to fill in
* @ret rc Return status code
if ( ! prime2->element[0] )
weierstrass_init ( curve );
- /* Use generator if applicable */
- if ( ! base )
- base = curve->base;
-
/* Convert input to projective coordinates in Montgomery form */
DBGC ( curve, "WEIERSTRASS %s base (", curve->name );
for ( i = 0, offset = 0 ; i < WEIERSTRASS_AXES ; i++, offset += len ) {
/**
* Multiply scalar by curve point
*
- * @v base Base point (or NULL to use generator)
+ * @v base Base point
* @v scalar Scalar multiple
* @v result Result point to fill in
* @ret rc Return status code
static int x25519_curve_multiply ( const void *base, const void *scalar,
void *result ) {
- /* Use base point if applicable */
- if ( ! base )
- base = &x25519_generator;
-
return x25519_key ( base, scalar, result );
}
.name = "x25519",
.pointsize = sizeof ( struct x25519_value ),
.keysize = sizeof ( struct x25519_value ),
+ .base = x25519_generator.raw,
.multiply = x25519_curve_multiply,
};
size_t pointsize;
/** Scalar (and private key) size */
size_t keysize;
+ /** Generator base point */
+ const void *base;
/** Multiply scalar by curve point
*
- * @v base Base point (or NULL to use generator)
+ * @v base Base point
* @v scalar Scalar multiple
* @v result Result point to fill in
* @ret rc Return status code
.name = #_name, \
.pointsize = ( WEIERSTRASS_AXES * (_len) ), \
.keysize = (_len), \
+ .base = (_base), \
.multiply = _name ## _multiply, \
}
size_t pointsize = curve->pointsize;
size_t keysize = curve->keysize;
uint8_t actual[pointsize];
+ const void *base;
int rc;
/* Sanity checks */
file, line );
/* Perform point multiplication */
- rc = elliptic_multiply ( curve, ( test->base_len ? test->base : NULL ),
- test->scalar, actual );
+ base = ( test->base_len ? test->base : curve->base );
+ rc = elliptic_multiply ( curve, base, test->scalar, actual );
if ( test->expected_len ) {
okx ( rc == 0, file, line );
} else {