Browse Source

Abstract & expose CompressedPointToSignAndY

feature/exp-comppoint-signy
arnaucube 3 years ago
parent
commit
71dbddb5f1
1 changed files with 15 additions and 2 deletions
  1. +15
    -2
      babyjub/babyjub.go

+ 15
- 2
babyjub/babyjub.go

@ -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

Loading…
Cancel
Save