fix: linter errors

Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com>
This commit is contained in:
Lorenz Herzberger 2024-09-11 16:23:10 +02:00
parent fca9100d47
commit f047cacdc5
No known key found for this signature in database
GPG Key ID: FA5EE906EB55316A
3 changed files with 69 additions and 58 deletions

View File

@ -91,7 +91,8 @@ func (s *E2ETestSuite) TestBankSendBroadcastTxWithFileLock() {
func (s *E2ETestSuite) TestOccSigning() { func (s *E2ETestSuite) TestOccSigning() {
val := s.network.Validators[0] val := s.network.Validators[0]
setKeys() _, err := setKeys()
s.Require().NoError(err)
k, err := val.ClientCtx.Keyring.Key(sample.Name) k, err := val.ClientCtx.Keyring.Key(sample.Name)
s.Require().NoError(err) s.Require().NoError(err)

View File

@ -1,6 +1,7 @@
package trustwallet package trustwallet
import ( import (
"errors"
"fmt" "fmt"
"io" "io"
"time" "time"
@ -30,20 +31,16 @@ func occDo(data []byte, bufferDelayMs int, portName string, outBuffer []byte) (i
mode := &serial.Mode{BaudRate: 115200} mode := &serial.Mode{BaudRate: 115200}
s, err := serial.Open(portName, mode) s, err := serial.Open(portName, mode)
if err != nil { if err != nil {
return 0, fmt.Errorf("unable to open serial port: %v", err) return 0, fmt.Errorf("unable to open serial port: %w", err)
} }
defer s.Close() defer s.Close()
fmt.Println("serial connected to port.")
// Encode payload using SLIP // Encode payload using SLIP
if err := encodeSLIP(payloadUnencoded, &payloadSlipEncoded); err != nil { encodeSLIP(payloadUnencoded, &payloadSlipEncoded)
return 0, fmt.Errorf("unable to encode SLIP: %v", err)
}
// Send encoded payload over serial // Send encoded payload over serial
if _, err := s.Write(payloadSlipEncoded); err != nil { if _, err := s.Write(payloadSlipEncoded); err != nil {
return 0, fmt.Errorf("unable to write to serial port: %v", err) return 0, fmt.Errorf("unable to write to serial port: %w", err)
} }
time.Sleep(time.Duration(bufferDelayMs) * time.Millisecond) time.Sleep(time.Duration(bufferDelayMs) * time.Millisecond)
@ -56,7 +53,7 @@ func occDo(data []byte, bufferDelayMs int, portName string, outBuffer []byte) (i
for { for {
n, err := s.Read(readBuffer) n, err := s.Read(readBuffer)
if err != nil && err != io.EOF { if err != nil && !errors.Is(err, io.EOF) {
time.Sleep(10 * time.Millisecond) time.Sleep(10 * time.Millisecond)
continue continue
} }
@ -69,9 +66,8 @@ func occDo(data []byte, bufferDelayMs int, portName string, outBuffer []byte) (i
if readBuffer[0] == SlipEnd { if readBuffer[0] == SlipEnd {
if slipMsgFramer == 1 { if slipMsgFramer == 1 {
break break
} else {
slipMsgFramer++
} }
slipMsgFramer++
} }
time.Sleep(1 * time.Millisecond) time.Sleep(1 * time.Millisecond)
} }
@ -79,7 +75,7 @@ func occDo(data []byte, bufferDelayMs int, portName string, outBuffer []byte) (i
// Decode SLIP response // Decode SLIP response
decodedResponse, err := decodeSLIP(encodedResponse) decodedResponse, err := decodeSLIP(encodedResponse)
if err != nil { if err != nil {
return 0, fmt.Errorf("unable to decode SLIP: %v", err) return 0, fmt.Errorf("unable to decode SLIP: %w", err)
} }
// Copy decoded response to outBuffer // Copy decoded response to outBuffer
@ -90,7 +86,7 @@ func occDo(data []byte, bufferDelayMs int, portName string, outBuffer []byte) (i
} }
// encodeSLIP encodes data using SLIP protocol. // encodeSLIP encodes data using SLIP protocol.
func encodeSLIP(data []byte, encoded *[]byte) error { func encodeSLIP(data []byte, encoded *[]byte) {
*encoded = append(*encoded, SlipEnd) *encoded = append(*encoded, SlipEnd)
for _, b := range data { for _, b := range data {
switch b { switch b {
@ -103,14 +99,13 @@ func encodeSLIP(data []byte, encoded *[]byte) error {
} }
} }
*encoded = append(*encoded, SlipEnd) *encoded = append(*encoded, SlipEnd)
return nil
} }
// decodeSLIP decodes SLIP-encoded data. // decodeSLIP decodes SLIP-encoded data.
func decodeSLIP(encoded []byte) ([]byte, error) { func decodeSLIP(encoded []byte) ([]byte, error) {
// Check for empty input // Check for empty input
if len(encoded) == 0 { if len(encoded) == 0 {
return nil, fmt.Errorf("encoded data is empty") return nil, errors.New("encoded data is empty")
} }
// Remove first and last SLIP_END bytes // Remove first and last SLIP_END bytes

View File

@ -3,6 +3,7 @@ package trustwallet
import ( import (
"bytes" "bytes"
"encoding/binary" "encoding/binary"
"errors"
"fmt" "fmt"
"strconv" "strconv"
"strings" "strings"
@ -46,11 +47,11 @@ func (s *OSCMessageSender) SendMessage(message []byte) (OSCResponse, error) {
) )
if err != nil { if err != nil {
return OSCResponse{}, fmt.Errorf("failed to send message: %v", err) return OSCResponse{}, fmt.Errorf("failed to send message: %w", err)
} }
if outputLength == 0 { if outputLength == 0 {
return OSCResponse{}, fmt.Errorf("no response received") return OSCResponse{}, errors.New("no response received")
} }
// Extract the information from the output buffer // Extract the information from the output buffer
@ -108,61 +109,65 @@ func (t *Connector) sendOSCMessage(address string, args ...interface{}) (OSCResp
t.mu.Lock() t.mu.Lock()
defer t.mu.Unlock() defer t.mu.Unlock()
message := encodeOSCMessage(address, args...) message, err := encodeOSCMessage(address, args...)
if err != nil {
return OSCResponse{}, err
}
return t.oscSender.SendMessage(message) return t.oscSender.SendMessage(message)
} }
func (t *Connector) ValiseGet() (string, error) { func (t *Connector) ValiseGet() (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/getSeed", PrefixIhw)) response, err := t.sendOSCMessage(PrefixIhw + "/getSeed")
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 0 { if len(response.Data) > 0 {
return response.Data[0], nil return response.Data[0], nil
} }
return "", fmt.Errorf("no data returned") return "", errors.New("no data returned")
} }
func (t *Connector) CreateMnemonic() (string, error) { func (t *Connector) CreateMnemonic() (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/mnemonicToSeed", PrefixIhw), int32(1)) response, err := t.sendOSCMessage(PrefixIhw+"/mnemonicToSeed", int32(1))
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 0 { if len(response.Data) > 0 {
return response.Data[0], nil return response.Data[0], nil
} }
return "", fmt.Errorf("no data returned") return "", errors.New("no data returned")
} }
func (t *Connector) InjectPlanetminkeyToSE050(slot int) (bool, error) { func (t *Connector) InjectPlanetminkeyToSE050(slot int) (bool, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/se050InjectSECPKeys", PrefixIhw), int32(slot)) response, err := t.sendOSCMessage(PrefixIhw+"/se050InjectSECPKeys", int32(slot))
if err != nil { if err != nil {
return false, err return false, err
} }
if len(response.Data) > 0 { if len(response.Data) > 0 {
return response.Data[0] == "0", nil return response.Data[0] == "0", nil
} }
return false, fmt.Errorf("no data returned") return false, errors.New("no data returned")
} }
func (t *Connector) RecoverFromMnemonic(mnemonic string) (string, error) { func (t *Connector) RecoverFromMnemonic(mnemonic string) (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/mnemonicToSeed", PrefixIhw), int32(1), mnemonic) response, err := t.sendOSCMessage(PrefixIhw+"/mnemonicToSeed", int32(1), mnemonic)
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 0 { if len(response.Data) > 0 {
return response.Data[0], nil return response.Data[0], nil
} }
return "", fmt.Errorf("no data returned") return "", errors.New("no data returned")
} }
func (t *Connector) GetPlanetmintKeys() (*PlanetMintKeys, error) { func (t *Connector) GetPlanetmintKeys() (*PlanetMintKeys, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/getPlntmntKeys", PrefixIhw)) response, err := t.sendOSCMessage(PrefixIhw + "/getPlntmntKeys")
if err != nil { if err != nil {
return nil, err return nil, err
} }
if len(response.Data) < 4 { if len(response.Data) < 4 {
return nil, fmt.Errorf("trust wallet not initialized. Please initialize the wallet") return nil, errors.New("trust wallet not initialized. Please initialize the wallet")
} }
return &PlanetMintKeys{ return &PlanetMintKeys{
PlanetmintAddress: response.Data[0], PlanetmintAddress: response.Data[0],
@ -173,58 +178,58 @@ func (t *Connector) GetPlanetmintKeys() (*PlanetMintKeys, error) {
} }
func (t *Connector) GetSeedSE050() (string, error) { func (t *Connector) GetSeedSE050() (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/se050GetSeed", PrefixIhw)) response, err := t.sendOSCMessage(PrefixIhw + "/se050GetSeed")
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 0 { if len(response.Data) > 0 {
return response.Data[0], nil return response.Data[0], nil
} }
return "", fmt.Errorf("no data returned") return "", errors.New("no data returned")
} }
func (t *Connector) SignHashWithPlanetmint(dataToSign string) (string, error) { func (t *Connector) SignHashWithPlanetmint(dataToSign string) (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/ecdsaSignPlmnt", PrefixIhw), dataToSign) response, err := t.sendOSCMessage(PrefixIhw+"/ecdsaSignPlmnt", dataToSign)
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 1 { if len(response.Data) > 1 {
return response.Data[1], nil return response.Data[1], nil
} }
return "", fmt.Errorf("no signature returned") return "", errors.New("no signature returned")
} }
func (t *Connector) SignHashWithRDDL(dataToSign string) (string, error) { func (t *Connector) SignHashWithRDDL(dataToSign string) (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/ecdsaSignRddl", PrefixIhw), dataToSign) response, err := t.sendOSCMessage(PrefixIhw+"/ecdsaSignRddl", dataToSign)
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 1 { if len(response.Data) > 1 {
return response.Data[1], nil return response.Data[1], nil
} }
return "", fmt.Errorf("no signature returned") return "", errors.New("no signature returned")
} }
func (t *Connector) CreateOptegaKeypair(ctx int) (string, error) { func (t *Connector) CreateOptegaKeypair(ctx int) (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/optigaTrustXCreateSecret", PrefixIhw), int32(ctx), "") response, err := t.sendOSCMessage(PrefixIhw+"/optigaTrustXCreateSecret", int32(ctx), "")
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 1 { if len(response.Data) > 1 {
return response.Data[1], nil return response.Data[1], nil
} }
return "", fmt.Errorf("no public key returned") return "", errors.New("no public key returned")
} }
func (t *Connector) SignWithOptega(ctx int, dataToSign, pubkey string) (string, error) { func (t *Connector) SignWithOptega(ctx int, dataToSign, pubkey string) (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/optigaTrustXSignMessage", PrefixIhw), int32(ctx), dataToSign, pubkey, "") response, err := t.sendOSCMessage(PrefixIhw+"/optigaTrustXSignMessage", int32(ctx), dataToSign, pubkey, "")
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 1 { if len(response.Data) > 1 {
return response.Data[1], nil return response.Data[1], nil
} }
return "", fmt.Errorf("no signature returned") return "", errors.New("no signature returned")
} }
func (t *Connector) UnwrapPublicKey(publicKey string) (bool, string) { func (t *Connector) UnwrapPublicKey(publicKey string) (bool, string) {
@ -238,65 +243,65 @@ func (t *Connector) UnwrapPublicKey(publicKey string) (bool, string) {
} }
func (t *Connector) CalculateHash(dataToSign string) (string, error) { func (t *Connector) CalculateHash(dataToSign string) (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/se050CalculateHash", PrefixIhw), dataToSign) response, err := t.sendOSCMessage(PrefixIhw+"/se050CalculateHash", dataToSign)
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 1 { if len(response.Data) > 1 {
return response.Data[1], nil return response.Data[1], nil
} }
return "", fmt.Errorf("no hash returned") return "", errors.New("no hash returned")
} }
func (t *Connector) CreateSE050KeypairNIST(ctx int) (string, error) { func (t *Connector) CreateSE050KeypairNIST(ctx int) (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/se050CreateKeyPair", PrefixIhw), int32(ctx), int32(1)) response, err := t.sendOSCMessage(PrefixIhw+"/se050CreateKeyPair", int32(ctx), int32(1))
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 1 { if len(response.Data) > 1 {
return response.Data[1], nil return response.Data[1], nil
} }
return "", fmt.Errorf("no public key returned") return "", errors.New("no public key returned")
} }
func (t *Connector) GetPublicKeyFromSE050(ctx int) (string, error) { func (t *Connector) GetPublicKeyFromSE050(ctx int) (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/se050GetPublicKey", PrefixIhw), int32(ctx)) response, err := t.sendOSCMessage(PrefixIhw+"/se050GetPublicKey", int32(ctx))
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 1 { if len(response.Data) > 1 {
valid, pubKey := t.UnwrapPublicKey(response.Data[1]) valid, pubKey := t.UnwrapPublicKey(response.Data[1])
if !valid { if !valid {
return "", fmt.Errorf("inject PlanetMintKey failed: No key found") return "", errors.New("inject PlanetMintKey failed: No key found")
} }
return pubKey, nil return pubKey, nil
} }
return "", fmt.Errorf("no public key returned") return "", errors.New("no public key returned")
} }
func (t *Connector) SignWithSE050(dataToSign string, ctx int) (string, error) { func (t *Connector) SignWithSE050(dataToSign string, ctx int) (string, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/se050SignData", PrefixIhw), dataToSign, int32(ctx)) response, err := t.sendOSCMessage(PrefixIhw+"/se050SignData", dataToSign, int32(ctx))
if err != nil { if err != nil {
return "", err return "", err
} }
if len(response.Data) > 1 { if len(response.Data) > 1 {
return response.Data[1], nil return response.Data[1], nil
} }
return "", fmt.Errorf("no signature returned") return "", errors.New("no signature returned")
} }
func (t *Connector) VerifySE050Signature(dataToSign, signature string, ctx int) (bool, error) { func (t *Connector) VerifySE050Signature(dataToSign, signature string, ctx int) (bool, error) {
response, err := t.sendOSCMessage(fmt.Sprintf("%s/se050VerifySignature", PrefixIhw), dataToSign, signature, int32(ctx)) response, err := t.sendOSCMessage(PrefixIhw+"/se050VerifySignature", dataToSign, signature, int32(ctx))
if err != nil { if err != nil {
return false, err return false, err
} }
if len(response.Data) > 1 { if len(response.Data) > 1 {
return strconv.ParseBool(response.Data[1]) return strconv.ParseBool(response.Data[1])
} }
return false, fmt.Errorf("no verification result returned") return false, errors.New("no verification result returned")
} }
func encodeOSCMessage(address string, args ...interface{}) []byte { func encodeOSCMessage(address string, args ...interface{}) (returnBytes []byte, err error) {
var buffer bytes.Buffer var buffer bytes.Buffer
// Write address // Write address
@ -309,13 +314,17 @@ func encodeOSCMessage(address string, args ...interface{}) []byte {
for _, arg := range args { for _, arg := range args {
switch arg.(type) { switch arg.(type) {
case int32: case int32:
buffer.WriteByte('i') err = buffer.WriteByte('i')
case float32: case float32:
buffer.WriteByte('f') err = buffer.WriteByte('f')
case string: case string:
buffer.WriteByte('s') err = buffer.WriteByte('s')
}
if err != nil {
return buffer.Bytes(), err
} }
} }
buffer.WriteByte(0) buffer.WriteByte(0)
alignBuffer(&buffer) alignBuffer(&buffer)
@ -323,17 +332,23 @@ func encodeOSCMessage(address string, args ...interface{}) []byte {
for _, arg := range args { for _, arg := range args {
switch v := arg.(type) { switch v := arg.(type) {
case int32: case int32:
binary.Write(&buffer, binary.BigEndian, v) err = binary.Write(&buffer, binary.BigEndian, v)
case float32: case float32:
binary.Write(&buffer, binary.BigEndian, v) err = binary.Write(&buffer, binary.BigEndian, v)
case string: case string:
buffer.WriteString(v) _, err = buffer.WriteString(v)
buffer.WriteByte(0) if err != nil {
return buffer.Bytes(), err
}
err = buffer.WriteByte(0)
alignBuffer(&buffer) alignBuffer(&buffer)
} }
if err != nil {
return buffer.Bytes(), err
}
} }
return buffer.Bytes() return buffer.Bytes(), nil
} }
func alignBuffer(buffer *bytes.Buffer) { func alignBuffer(buffer *bytes.Buffer) {