1package org.bouncycastle.crypto.params;
2
3import org.bouncycastle.math.ec.ECPoint;
4
5public class ECPublicKeyParameters
6    extends ECKeyParameters
7{
8    private final ECPoint Q;
9
10    public ECPublicKeyParameters(
11        ECPoint             Q,
12        ECDomainParameters  params)
13    {
14        super(false, params);
15
16        this.Q = validate(Q);
17    }
18
19    private ECPoint validate(ECPoint q)
20    {
21        if (q == null)
22        {
23            throw new IllegalArgumentException("point has null value");
24        }
25
26        if (q.isInfinity())
27        {
28            throw new IllegalArgumentException("point at infinity");
29        }
30
31        q = q.normalize();
32
33        if (!q.isValid())
34        {
35            throw new IllegalArgumentException("point not on curve");
36        }
37
38        return q;
39    }
40
41    public ECPoint getQ()
42    {
43        return Q;
44    }
45}
46