Documentation ¶
Index ¶
- Constants
- Variables
- func GenerateCertFromKey(pk *ecdsa.PrivateKey, from time.Time, hostname string) (tls.Certificate, []byte, error)
- func GenerateX509Cert(sn *big.Int, from, to time.Time, hostname string) *x509.Certificate
- func GenerateX509PEMs(cert *x509.Certificate, key *ecdsa.PrivateKey) (certPem, keyPem []byte, err error)
- func StartUpPairingClient(backend *api.GethStatusBackend, cs, configJSON string) error
- func StartUpPairingServer(backend *api.GethStatusBackend, mode Mode, configJSON string) (string, error)
- func ValidateConnectionString(cs string) error
- type AccountPayload
- type AccountPayloadManager
- type AccountPayloadManagerConfig
- type AccountPayloadMarshaller
- type AccountPayloadRepository
- type Action
- type Client
- type Config
- type ConnectionParamVersion
- type ConnectionParams
- type EncryptionPayload
- type Event
- type EventType
- type Mode
- type PayloadEncryptionManager
- func (pem *PayloadEncryptionManager) Decrypt(data []byte) error
- func (pem *PayloadEncryptionManager) Encrypt(data []byte) error
- func (pem *PayloadEncryptionManager) EncryptPlain(plaintext []byte) ([]byte, error)
- func (pem *PayloadEncryptionManager) LockPayload()
- func (pem *PayloadEncryptionManager) Received() []byte
- func (pem *PayloadEncryptionManager) ResetPayload()
- func (pem *PayloadEncryptionManager) ToSend() []byte
- type PayloadManager
- type PayloadRepository
- type PayloadSourceConfig
- type RawMessageCollector
- type RawMessagePayloadManager
- type RawMessageRepository
- type Server
- type SyncRawMessageHandler
Constants ¶
const ( ActionConnect = iota + 1 ActionPairingAccount ActionSyncDevice )
Variables ¶
var (
ErrKeyFileAlreadyExists = errors.New("key file already exists")
)
Functions ¶
func GenerateCertFromKey ¶
func GenerateCertFromKey(pk *ecdsa.PrivateKey, from time.Time, hostname string) (tls.Certificate, []byte, error)
func GenerateX509Cert ¶
func GenerateX509PEMs ¶
func GenerateX509PEMs(cert *x509.Certificate, key *ecdsa.PrivateKey) (certPem, keyPem []byte, err error)
func StartUpPairingClient ¶
func StartUpPairingClient(backend *api.GethStatusBackend, cs, configJSON string) error
func StartUpPairingServer ¶
func StartUpPairingServer(backend *api.GethStatusBackend, mode Mode, configJSON string) (string, error)
StartUpPairingServer generates a Server, starts the pairing server in the correct mode and returns the ConnectionParams string to allow a Client to make a successful connection.
func ValidateConnectionString ¶ added in v0.131.7
Types ¶
type AccountPayload ¶
type AccountPayload struct {
// contains filtered or unexported fields
}
AccountPayload represents the payload structure a Server handles
func (*AccountPayload) ResetPayload ¶
func (ap *AccountPayload) ResetPayload()
type AccountPayloadManager ¶
type AccountPayloadManager struct { *PayloadEncryptionManager // contains filtered or unexported fields }
AccountPayloadManager is responsible for the whole lifecycle of a AccountPayload
func NewAccountPayloadManager ¶
func NewAccountPayloadManager(aesKey []byte, config *AccountPayloadManagerConfig, logger *zap.Logger) (*AccountPayloadManager, error)
NewAccountPayloadManager generates a new and initialised AccountPayloadManager
func (*AccountPayloadManager) Mount ¶
func (apm *AccountPayloadManager) Mount() error
Mount loads and prepares the payload to be stored in the AccountPayloadManager's state ready for later access
func (*AccountPayloadManager) Receive ¶
func (apm *AccountPayloadManager) Receive(data []byte) error
Receive takes a []byte representing raw data, parses and stores the data
func (*AccountPayloadManager) ResetPayload ¶
func (apm *AccountPayloadManager) ResetPayload()
ResetPayload resets all payload state managed by the AccountPayloadManager
type AccountPayloadManagerConfig ¶
type AccountPayloadManagerConfig struct { DB *multiaccounts.Database *PayloadSourceConfig }
AccountPayloadManagerConfig represents the initialisation parameters required for a AccountPayloadManager
type AccountPayloadMarshaller ¶
type AccountPayloadMarshaller struct { *AccountPayload // contains filtered or unexported fields }
AccountPayloadMarshaller is responsible for marshalling and unmarshalling Server payload data
func NewPairingPayloadMarshaller ¶
func NewPairingPayloadMarshaller(ap *AccountPayload, logger *zap.Logger) *AccountPayloadMarshaller
func (*AccountPayloadMarshaller) MarshalToProtobuf ¶
func (ppm *AccountPayloadMarshaller) MarshalToProtobuf() ([]byte, error)
func (*AccountPayloadMarshaller) UnmarshalProtobuf ¶
func (ppm *AccountPayloadMarshaller) UnmarshalProtobuf(data []byte) error
type AccountPayloadRepository ¶
type AccountPayloadRepository struct { *AccountPayload // contains filtered or unexported fields }
AccountPayloadRepository is responsible for loading, parsing, validating and storing Server payload data
func NewAccountPayloadRepository ¶
func NewAccountPayloadRepository(p *AccountPayload, config *AccountPayloadManagerConfig) *AccountPayloadRepository
func (*AccountPayloadRepository) LoadFromSource ¶
func (apr *AccountPayloadRepository) LoadFromSource() error
func (*AccountPayloadRepository) StoreToSource ¶
func (apr *AccountPayloadRepository) StoreToSource() error
type Client ¶
type Client struct { *http.Client PayloadManager // contains filtered or unexported fields }
func NewPairingClient ¶
func NewPairingClient(backend *api.GethStatusBackend, c *ConnectionParams, config *AccountPayloadManagerConfig) (*Client, error)
func (*Client) PairAccount ¶
func (*Client) PairSyncDevice ¶
type Config ¶
type Config struct { // Connection fields PK *ecdsa.PublicKey EK []byte Cert *tls.Certificate Hostname string Mode Mode // AccountPayload management fields *AccountPayloadManagerConfig }
type ConnectionParamVersion ¶
type ConnectionParamVersion int
const (
Version1 ConnectionParamVersion = iota + 1
)
type ConnectionParams ¶
type ConnectionParams struct {
// contains filtered or unexported fields
}
func NewConnectionParams ¶
func (*ConnectionParams) FromString ¶
func (cp *ConnectionParams) FromString(s string) error
FromString parses a connection params string required for to securely connect to another Status device. This function parses a connection string generated by ToString
func (*ConnectionParams) ToString ¶
func (cp *ConnectionParams) ToString() string
ToString generates a string required for generating a secure connection to another Status device.
The returned string will look like below:
- "cs2:4FHRnp:H6G:uqnnMwVUfJc2Fkcaojet8F1ufKC3hZdGEt47joyBx9yd:BbnZ7Gc66t54a9kEFCf7FW8SGQuYypwHVeNkRYeNoqV6:2"
Format bytes encoded into a base58 string, delimited by ":"
- string type identifier
- version
- net.IP
- port
- ecdsa CompressedPublicKey
- AES encryption key
- server mode
type EncryptionPayload ¶
type EncryptionPayload struct {
// contains filtered or unexported fields
}
EncryptionPayload represents the plain text and encrypted text of payload data
type Event ¶
type Event struct { Type EventType `json:"type"` Error string `json:"error,omitempty"` Action Action `json:"action"` }
Event is a type for transfer events.
type EventType ¶
type EventType string
EventType type for event types.
const ( // both client and server EventConnectionError EventType = "connection-error" EventConnectionSuccess EventType = "connection-success" EventTransferError EventType = "transfer-error" EventTransferSuccess EventType = "transfer-success" // Only receiver side EventProcessSuccess EventType = "process-success" EventProcessError EventType = "process-error" )
type PayloadEncryptionManager ¶
type PayloadEncryptionManager struct {
// contains filtered or unexported fields
}
PayloadEncryptionManager is responsible for encrypting and decrypting payload data
func NewPayloadEncryptionManager ¶
func NewPayloadEncryptionManager(aesKey []byte, logger *zap.Logger) (*PayloadEncryptionManager, error)
func (*PayloadEncryptionManager) Decrypt ¶
func (pem *PayloadEncryptionManager) Decrypt(data []byte) error
func (*PayloadEncryptionManager) Encrypt ¶
func (pem *PayloadEncryptionManager) Encrypt(data []byte) error
func (*PayloadEncryptionManager) EncryptPlain ¶
func (pem *PayloadEncryptionManager) EncryptPlain(plaintext []byte) ([]byte, error)
EncryptPlain encrypts any given plain text using the internal AES key and returns the encrypted value This function is different to Encrypt as the internal EncryptionPayload.encrypted value is not set
func (*PayloadEncryptionManager) LockPayload ¶
func (pem *PayloadEncryptionManager) LockPayload()
func (*PayloadEncryptionManager) Received ¶
func (pem *PayloadEncryptionManager) Received() []byte
func (*PayloadEncryptionManager) ResetPayload ¶
func (pem *PayloadEncryptionManager) ResetPayload()
func (*PayloadEncryptionManager) ToSend ¶
func (pem *PayloadEncryptionManager) ToSend() []byte
type PayloadManager ¶
type PayloadManager interface { // Mount Loads the payload into the PayloadManager's state Mount() error // Receive stores data from an inbound source into the PayloadManager's state Receive(data []byte) error // ToSend returns an outbound safe (encrypted) payload ToSend() []byte // Received returns a decrypted and parsed payload from an inbound source Received() []byte // ResetPayload resets all payloads the PayloadManager has in its state ResetPayload() // EncryptPlain encrypts the given plaintext using internal key(s) EncryptPlain(plaintext []byte) ([]byte, error) // LockPayload prevents future excess to outbound safe and received data LockPayload() }
PayloadManager is the interface for PayloadManagers and wraps the basic functions for fulfilling payload management
type PayloadRepository ¶
type PayloadSourceConfig ¶
type PayloadSourceConfig struct { // required KeystorePath string `json:"keystorePath"` // following 2 fields r optional. // optional cases: // 1. server mode is Receiving and server side doesn't contain this info // 2. server mode is Sending and client side doesn't contain this info // they are required in other cases KeyUID string `json:"keyUID"` Password string `json:"password"` // Timeout the number of milliseconds after which the pairing server will automatically terminate Timeout uint `json:"timeout"` }
PayloadSourceConfig represents location and access data of the pairing payload ONLY available from the application client
type RawMessageCollector ¶
type RawMessageCollector struct {
// contains filtered or unexported fields
}
type RawMessagePayloadManager ¶
type RawMessagePayloadManager struct { *PayloadEncryptionManager // contains filtered or unexported fields }
func NewRawMessagePayloadManager ¶
func NewRawMessagePayloadManager(logger *zap.Logger, accountPayload *AccountPayload, aesKey []byte, backend *api.GethStatusBackend, keystorePath string) (*RawMessagePayloadManager, error)
func (*RawMessagePayloadManager) Mount ¶
func (r *RawMessagePayloadManager) Mount() error
func (*RawMessagePayloadManager) Receive ¶
func (r *RawMessagePayloadManager) Receive(data []byte) error
func (*RawMessagePayloadManager) ResetPayload ¶
func (r *RawMessagePayloadManager) ResetPayload()
type RawMessageRepository ¶
type RawMessageRepository struct {
// contains filtered or unexported fields
}
func NewRawMessageRepository ¶
func NewRawMessageRepository(backend *api.GethStatusBackend, keystorePath string, accountPayload *AccountPayload) *RawMessageRepository
func (*RawMessageRepository) LoadFromSource ¶
func (r *RawMessageRepository) LoadFromSource() error
func (*RawMessageRepository) StoreToSource ¶
func (r *RawMessageRepository) StoreToSource() error
type Server ¶
type Server struct { server.Server PayloadManager // contains filtered or unexported fields }
func MakeFullPairingServer ¶
func MakeFullPairingServer(backend *api.GethStatusBackend, mode Mode, storeConfig *PayloadSourceConfig) (*Server, error)
MakeFullPairingServer generates a fully configured and randomly seeded Server
func NewPairingServer ¶
func NewPairingServer(backend *api.GethStatusBackend, config *Config) (*Server, error)
NewPairingServer returns a *Server init from the given *Config
func (*Server) MakeConnectionParams ¶
func (s *Server) MakeConnectionParams() (*ConnectionParams, error)
MakeConnectionParams generates a *ConnectionParams based on the Server's current state
func (*Server) StartPairing ¶
type SyncRawMessageHandler ¶
type SyncRawMessageHandler struct {
// contains filtered or unexported fields
}
func NewSyncRawMessageHandler ¶
func NewSyncRawMessageHandler(backend *api.GethStatusBackend) *SyncRawMessageHandler
func (*SyncRawMessageHandler) HandleRawMessage ¶
func (s *SyncRawMessageHandler) HandleRawMessage(account *multiaccounts.Account, password, keystorePath string, payload []byte) error
func (*SyncRawMessageHandler) PrepareRawMessage ¶
func (s *SyncRawMessageHandler) PrepareRawMessage(keyUID string) ([]byte, error)