Skip to content

Commit

Permalink
Abstract & expose CompressedPointToSignAndY
Browse files Browse the repository at this point in the history
  • Loading branch information
arnaucube committed Dec 21, 2020
1 parent 0a5c6ac commit 71dbddb
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions babyjub/babyjub.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,13 +222,26 @@ func (p *Point) Compress() [32]byte {
// Decompress a compressed Point into p, and also returns the decompressed
// Point. Returns error if the compressed Point is invalid.
func (p *Point) Decompress(leBuf [32]byte) (*Point, error) {
var sign bool
sign, p.Y = CompressedPointToSignAndY(leBuf)
return PointFromSignAndY(sign, p.Y)
}

// CompressedPointToSignAndY returns the sign and coordinate Y from a given
// compressed point. This method does not check that the Point belongs to the
// BabyJubJub curve, thus does not return error in such case. This method is
// intended to obtain the sign and the Y coordinate without checking if the
// point belongs to the curve, if the objective is to uncompress a point
// Decompress method should be used instead.
func CompressedPointToSignAndY(leBuf [32]byte) (bool, *big.Int) {
sign := false
y := big.NewInt(0)
if (leBuf[31] & 0x80) != 0x00 { //nolint:gomnd
sign = true
leBuf[31] = leBuf[31] & 0x7F //nolint:gomnd
}
utils.SetBigIntFromLEBytes(p.Y, leBuf[:])
return PointFromSignAndY(sign, p.Y)
utils.SetBigIntFromLEBytes(y, leBuf[:])
return sign, y
}

// PointFromSignAndY returns a Point from a Sign and the Y coordinate
Expand Down

0 comments on commit 71dbddb

Please sign in to comment.