99 "fmt"
1010 "os"
1111
12+ "github.com/decred/dcrd/dcrec/secp256k1"
1213 "github.com/ethereum/go-ethereum/crypto"
1314
1415 "github.com/piplabs/story/lib/errors"
@@ -30,17 +31,16 @@ func decodeAndUncompressPubKey(compressedPubKeyBase64 string) (string, error) {
3031 if err != nil {
3132 return "" , errors .Wrap (err , "failed to decode base64 public key" )
3233 }
33- if len (compressedPubKeyBytes ) != 33 {
34+ if len (compressedPubKeyBytes ) != secp256k1 . PubKeyBytesLenCompressed {
3435 return "" , fmt .Errorf ("invalid compressed public key length: %d" , len (compressedPubKeyBytes ))
3536 }
3637
37- curve := elliptic .P256 ()
38- x , y := elliptic .UnmarshalCompressed (curve , compressedPubKeyBytes )
39- if x == nil || y == nil {
40- return "" , errors .New ("failed to unmarshal compressed public key" )
38+ pubKey , err := secp256k1 .ParsePubKey (compressedPubKeyBytes )
39+ if err != nil {
40+ return "" , errors .Wrap (err , "failed to parse compressed public key" )
4141 }
4242
43- uncompressedPubKeyBytes := elliptic . Marshal ( curve , x , y )
43+ uncompressedPubKeyBytes := pubKey . SerializeUncompressed ( )
4444 uncompressedPubKeyHex := hex .EncodeToString (uncompressedPubKeyBytes )
4545
4646 return uncompressedPubKeyHex , nil
0 commit comments