@@ -258,13 +258,20 @@ where
258258
259259impl < C > Group for ProjectivePoint < C >
260260where
261- Self : Double ,
261+ Self : GroupEncoding ,
262262 C : PrimeCurveParams ,
263263{
264264 type Scalar = Scalar < C > ;
265265
266266 fn try_from_rng < R : TryRngCore + ?Sized > ( rng : & mut R ) -> core:: result:: Result < Self , R :: Error > {
267- Ok ( Self :: GENERATOR * <Scalar < C > as Field >:: try_from_rng ( rng) ?)
267+ let mut bytes = <Self as GroupEncoding >:: Repr :: default ( ) ;
268+
269+ loop {
270+ rng. try_fill_bytes ( bytes. as_mut ( ) ) ?;
271+ if let Some ( point) = Self :: from_bytes ( & bytes) . into ( ) {
272+ return Ok ( point) ;
273+ }
274+ }
268275 }
269276
270277 fn identity ( ) -> Self {
@@ -311,7 +318,7 @@ where
311318
312319impl < C > CurveGroup for ProjectivePoint < C >
313320where
314- Self : Double ,
321+ Self : GroupEncoding ,
315322 C : PrimeCurveParams ,
316323{
317324 type AffineRepr = AffinePoint < C > ;
@@ -331,7 +338,7 @@ where
331338
332339impl < const N : usize , C > BatchNormalize < [ ProjectivePoint < C > ; N ] > for ProjectivePoint < C >
333340where
334- Self : Double ,
341+ Self : GroupEncoding ,
335342 C : PrimeCurveParams ,
336343{
337344 type Output = [ <Self as CurveGroup >:: AffineRepr ; N ] ;
@@ -348,7 +355,7 @@ where
348355#[ cfg( feature = "alloc" ) ]
349356impl < C > BatchNormalize < [ ProjectivePoint < C > ] > for ProjectivePoint < C >
350357where
351- Self : Double ,
358+ Self : GroupEncoding ,
352359 C : PrimeCurveParams ,
353360{
354361 type Output = Vec < <Self as CurveGroup >:: AffineRepr > ;
@@ -400,15 +407,15 @@ where
400407
401408impl < C > LinearCombination < [ ( Self , Scalar < C > ) ] > for ProjectivePoint < C >
402409where
403- Self : Double ,
410+ Self : GroupEncoding ,
404411 C : PrimeCurveParams ,
405412{
406413 // TODO(tarcieri): optimized implementation
407414}
408415
409416impl < C , const N : usize > LinearCombination < [ ( Self , Scalar < C > ) ; N ] > for ProjectivePoint < C >
410417where
411- Self : Double ,
418+ Self : GroupEncoding ,
412419 C : PrimeCurveParams ,
413420{
414421 // TODO(tarcieri): optimized implementation
0 commit comments