# Class BSV::Primitives::PointInFiniteField <a id="class-BSV-Primitives-PointInFiniteField"></a>

**Inherits:** `Object`

A point (x, y) in a finite field over the secp256k1 field prime P.

Used as a share in Shamir's Secret Sharing Scheme. Both coordinates are
reduced modulo P on construction so they always lie in [0, P).

Serialisation uses Base58 for each coordinate, joined by a dot, matching the
format used by the Go and TypeScript reference SDKs.

**@example**
```ruby
point = PointInFiniteField.new(OpenSSL::BN.new(10), OpenSSL::BN.new(20))
str   = point.to_s   #=> "C.N"
back  = PointInFiniteField.from_string(str)
```

## Constants
### `P` <a id="constant-P"></a> <a id="P-constant"></a>
The secp256k1 field prime P.

## Attributes
### `x` [R] <a id="attribute-i-x"></a> <a id="x-instance_method"></a>
- **@return** [OpenSSL::BN] the x-coordinate, reduced mod P

### `y` [R] <a id="attribute-i-y"></a> <a id="y-instance_method"></a>
- **@return** [OpenSSL::BN] the y-coordinate, reduced mod P

## Public Class Methods
### `from_string(str)` <a id="method-c-from_string"></a> <a id="from_string-class_method"></a>
Deserialise from a "Base58(x).Base58(y)" string.
- **@param** `str` [String] dot-separated Base58-encoded coordinates
- **@raise** [ArgumentError] if the string does not contain exactly one dot
- **@return** [PointInFiniteField]

## Public Instance Methods
### `initialize(x, y)` <a id="method-i-initialize"></a> <a id="initialize-instance_method"></a>
- **@param** `x` [OpenSSL::BN] the x-coordinate
- **@param** `y` [OpenSSL::BN] the y-coordinate
- **@return** [PointInFiniteField] a new instance of PointInFiniteField

### `to_s()` <a id="method-i-to_s"></a> <a id="to_s-instance_method"></a>
Serialise to Base58(x) + "." + Base58(y).
- **@return** [String] dot-separated Base58-encoded coordinates
