Class NistCurveProcessor

  • All Implemented Interfaces:
    CurveProcessor

    public class NistCurveProcessor
    extends java.lang.Object
    implements CurveProcessor
    Curve processor for NIST curves (P-256, P-384, P-521) where the cofactor is 1.

    Although the cofactor is 1 for all NIST curves, RFC 9380 still requires the "clear_cofactor" step for consistency. In Bouncy Castle, invoking ECPoint.multiply(BigInteger.ONE) is not a trivial no-op: it forces normalization of the internal point representation and ensures that the returned point is in canonical affine form.

    This normalization step is required for correct alignment with the specification and for matching the published test vectors. Returning the input point directly (without normalization) may leave the point in a projective or mixed representation, which causes test vector comparisons to fail even though the mathematical value of the point is the same.

    • Constructor Summary

      Constructors 
      Constructor Description
      NistCurveProcessor()
      Constructs a new instance of NistCurveProcessor.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      ECPoint add​(ECPoint p, ECPoint q)
      Add two points in the curve group.
      ECPoint clearCofactor​(ECPoint ecPoint)
      Clears the cofactor from the given elliptic curve point.
      AffineXY mapToAffineXY​(ECPoint p)
      Converts an elliptic-curve point into the affine (x, y) coordinate representation defined by the hash-to-curve suite.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • NistCurveProcessor

        public NistCurveProcessor()
        Constructs a new instance of NistCurveProcessor. This class processes elliptic curve operations for NIST curves (P-256, P-384, P-521) with a cofactor of 1. It ensures compliance with RFC 9380 by performing required normalization steps, such as the "clear_cofactor" operation, to align the elliptic curve points with their canonical affine form and match published test vectors.
    • Method Detail

      • clearCofactor

        public ECPoint clearCofactor​(ECPoint ecPoint)
        Clears the cofactor from the given elliptic curve point.
        Specified by:
        clearCofactor in interface CurveProcessor
        Parameters:
        ecPoint - the elliptic curve point to process
        Returns:
        the elliptic curve point with the cofactor cleared
      • mapToAffineXY

        public AffineXY mapToAffineXY​(ECPoint p)
        Description copied from interface: CurveProcessor
        Converts an elliptic-curve point into the affine (x, y) coordinate representation defined by the hash-to-curve suite.

        The returned coordinates are intended for serialization, testing, and interoperability with the reference outputs defined in RFC 9380. For most Weierstrass curves, this is simply the affine (x, y) coordinates of the given point. For curves that use a different coordinate model in the specification (e.g. Montgomery curves such as curve25519), this method applies the appropriate coordinate transformation.

        This method does not change the underlying group element represented by the point. It only changes how that point is expressed as field elements. The input point is expected to be a valid point on the curve used by the implementation.

        Specified by:
        mapToAffineXY in interface CurveProcessor
        Parameters:
        p - a valid elliptic-curve point
        Returns:
        the affine (x, y) coordinates corresponding to the suite-specific representation of the given point