PallasNativePoint.hashToCurve constructor

PallasNativePoint.hashToCurve({
  1. required String domainPrefix,
  2. required List<int> message,
})

Implementation

factory PallasNativePoint.hashToCurve({
  required String domainPrefix,
  required List<int> message,
}) {
  final hashToField = PastaUtils.hashToFiled(
    curveId: PastaCurveParams.pallas.name.curveId,
    domainPrefix: domainPrefix,
    message: message,
  );
  final PallasNativeFp a = PallasNativeFp.fromBytes64(hashToField.$1);
  final PallasNativeFp b = PallasNativeFp.fromBytes64(hashToField.$2);
  final q0 = PastaUtils.mapToCurveSimpleSwu(
    u: a,
    theta: PallasNativeFp.theta(),
    z: PallasNativeFp.z(),
    isogenyParams: PastaCurveParams.isoPallasNative,
    r: PallasNativeFp.r(),
  );
  final q0Point = PallasIsoNativePoint(x: q0.$1, y: q0.$2, z: q0.$3);
  final q1 = PastaUtils.mapToCurveSimpleSwu(
    u: b,
    theta: PallasNativeFp.theta(),
    z: PallasNativeFp.z(),
    isogenyParams: PastaCurveParams.isoPallasNative,
    r: PallasNativeFp.r(),
  );

  final q1Point = PallasIsoNativePoint(x: q1.$1, y: q1.$2, z: q1.$3);
  final r = q0Point + q1Point;
  assert(r.isOnCurve());
  final point = PastaUtils.isoMap(
    p: (r.x, r.y, r.z),
    iso: PallasFPConst.isogenyConstantsNative,
  );
  return PallasNativePoint(x: point.$1, y: point.$2, z: point.$3);
}