diff --git a/keypairs/ed25519/publickey.go b/keypairs/ed25519/publickey.go index aa7dfe0..6906b4d 100644 --- a/keypairs/ed25519/publickey.go +++ b/keypairs/ed25519/publickey.go @@ -1,6 +1,7 @@ package ed25519 import ( + "bytes" "crypto/ed25519" "encoding/base64" "encoding/hex" @@ -10,6 +11,8 @@ import ( "golang.org/x/crypto/blake2b" "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/mystenbcs" ) type Ed25519PublicKey struct { @@ -23,19 +26,26 @@ func NewEd25519PublicKey(signature []byte) *Ed25519PublicKey { } func (e *Ed25519PublicKey) ToSuiAddress() string { - return "" + panic("not implemented") } func (e *Ed25519PublicKey) VerifyPersonalMessage(message []byte, signature []byte, client *graphql.Client) (bool, error) { b64Message := base64.StdEncoding.EncodeToString([]byte(message)) - return VerifyMessage(b64Message, signature, constant.PersonalMessageIntentScope) + b64Signature := base64.StdEncoding.EncodeToString([]byte(signature)) + _, pass, err := VerifyMessage(b64Message, b64Signature, constant.PersonalMessageIntentScope) + return pass, err } func VerifyMessage(message, signature string, scope constant.IntentScope) (signer string, pass bool, err error) { b64Bytes, _ := base64.StdEncoding.DecodeString(message) - messageBytes := NewMessageWithIntent(b64Bytes, scope) - serializedSignature, err := FromSerializedSignature(signature) + bcsEncodedMsg := bytes.Buffer{} + bcsEncoder := mystenbcs.NewEncoder(&bcsEncodedMsg) + bcsEncoder.Encode(b64Bytes) + + messageBytes := models.NewMessageWithIntent(bcsEncodedMsg.Bytes(), scope) + + serializedSignature, err := models.FromSerializedSignature(signature) if err != nil { return "", false, err } @@ -52,7 +62,7 @@ func VerifyMessage(message, signature string, scope constant.IntentScope) (signe } func Ed25519PublicKeyToSuiAddress(pubKey []byte) string { - newPubkey := []byte{byte(SigFlagEd25519)} + newPubkey := []byte{byte(models.SigFlagEd25519)} newPubkey = append(newPubkey, pubKey...) addrBytes := blake2b.Sum256(newPubkey) diff --git a/zklogin/publickey.go b/zklogin/publickey.go index 2191759..991743c 100644 --- a/zklogin/publickey.go +++ b/zklogin/publickey.go @@ -30,10 +30,7 @@ type ZkLoginPublicIdentifier struct { } func NewZkLoginPublicIdentifier(data []byte, options *ZkLoginPublicIdentifierOptions) *ZkLoginPublicIdentifier { - return &ZkLoginPublicIdentifier{ - data: data, - options: options, - } + panic("not implemented") } /** @@ -44,6 +41,7 @@ func (p *ZkLoginPublicIdentifier) toRawBytes() []byte { } func (p *ZkLoginPublicIdentifier) ToSuiAddress() string { + panic("not implemented") // Each hex char represents half a byte, hence hex address doubles the length // return normalizeSuiAddress( @@ -51,7 +49,7 @@ func (p *ZkLoginPublicIdentifier) ToSuiAddress() string { // ); // Convert the public identifier to a Sui address - return "0x" + mystenbcs.ToHex(mystenbcs.Blake2b(p.toSuiBytes(), 32))[:40] + // return "0x" + mystenbcs.ToHex(mystenbcs.Blake2b(p.toSuiBytes(), 32))[:40] } func (pk *ZkLoginPublicIdentifier) VerifyPersonalMessage(message []byte, signature []byte, client *graphql.Client) (bool, error) {