mirror of https://github.com/ethereum/go-ethereum
parent
4799b5abd4
commit
b4cc7b660c
@ -0,0 +1,811 @@ |
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// source: messages-common.proto
|
||||
|
||||
package trezor |
||||
|
||||
import ( |
||||
fmt "fmt" |
||||
math "math" |
||||
|
||||
proto "github.com/golang/protobuf/proto" |
||||
) |
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal |
||||
var _ = fmt.Errorf |
||||
var _ = math.Inf |
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
// A compilation error at this line likely means your copy of the
|
||||
// proto package needs to be updated.
|
||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||
|
||||
type Failure_FailureType int32 |
||||
|
||||
const ( |
||||
Failure_Failure_UnexpectedMessage Failure_FailureType = 1 |
||||
Failure_Failure_ButtonExpected Failure_FailureType = 2 |
||||
Failure_Failure_DataError Failure_FailureType = 3 |
||||
Failure_Failure_ActionCancelled Failure_FailureType = 4 |
||||
Failure_Failure_PinExpected Failure_FailureType = 5 |
||||
Failure_Failure_PinCancelled Failure_FailureType = 6 |
||||
Failure_Failure_PinInvalid Failure_FailureType = 7 |
||||
Failure_Failure_InvalidSignature Failure_FailureType = 8 |
||||
Failure_Failure_ProcessError Failure_FailureType = 9 |
||||
Failure_Failure_NotEnoughFunds Failure_FailureType = 10 |
||||
Failure_Failure_NotInitialized Failure_FailureType = 11 |
||||
Failure_Failure_PinMismatch Failure_FailureType = 12 |
||||
Failure_Failure_FirmwareError Failure_FailureType = 99 |
||||
) |
||||
|
||||
var Failure_FailureType_name = map[int32]string{ |
||||
1: "Failure_UnexpectedMessage", |
||||
2: "Failure_ButtonExpected", |
||||
3: "Failure_DataError", |
||||
4: "Failure_ActionCancelled", |
||||
5: "Failure_PinExpected", |
||||
6: "Failure_PinCancelled", |
||||
7: "Failure_PinInvalid", |
||||
8: "Failure_InvalidSignature", |
||||
9: "Failure_ProcessError", |
||||
10: "Failure_NotEnoughFunds", |
||||
11: "Failure_NotInitialized", |
||||
12: "Failure_PinMismatch", |
||||
99: "Failure_FirmwareError", |
||||
} |
||||
|
||||
var Failure_FailureType_value = map[string]int32{ |
||||
"Failure_UnexpectedMessage": 1, |
||||
"Failure_ButtonExpected": 2, |
||||
"Failure_DataError": 3, |
||||
"Failure_ActionCancelled": 4, |
||||
"Failure_PinExpected": 5, |
||||
"Failure_PinCancelled": 6, |
||||
"Failure_PinInvalid": 7, |
||||
"Failure_InvalidSignature": 8, |
||||
"Failure_ProcessError": 9, |
||||
"Failure_NotEnoughFunds": 10, |
||||
"Failure_NotInitialized": 11, |
||||
"Failure_PinMismatch": 12, |
||||
"Failure_FirmwareError": 99, |
||||
} |
||||
|
||||
func (x Failure_FailureType) Enum() *Failure_FailureType { |
||||
p := new(Failure_FailureType) |
||||
*p = x |
||||
return p |
||||
} |
||||
|
||||
func (x Failure_FailureType) String() string { |
||||
return proto.EnumName(Failure_FailureType_name, int32(x)) |
||||
} |
||||
|
||||
func (x *Failure_FailureType) UnmarshalJSON(data []byte) error { |
||||
value, err := proto.UnmarshalJSONEnum(Failure_FailureType_value, data, "Failure_FailureType") |
||||
if err != nil { |
||||
return err |
||||
} |
||||
*x = Failure_FailureType(value) |
||||
return nil |
||||
} |
||||
|
||||
func (Failure_FailureType) EnumDescriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{1, 0} |
||||
} |
||||
|
||||
//*
|
||||
// Type of button request
|
||||
type ButtonRequest_ButtonRequestType int32 |
||||
|
||||
const ( |
||||
ButtonRequest_ButtonRequest_Other ButtonRequest_ButtonRequestType = 1 |
||||
ButtonRequest_ButtonRequest_FeeOverThreshold ButtonRequest_ButtonRequestType = 2 |
||||
ButtonRequest_ButtonRequest_ConfirmOutput ButtonRequest_ButtonRequestType = 3 |
||||
ButtonRequest_ButtonRequest_ResetDevice ButtonRequest_ButtonRequestType = 4 |
||||
ButtonRequest_ButtonRequest_ConfirmWord ButtonRequest_ButtonRequestType = 5 |
||||
ButtonRequest_ButtonRequest_WipeDevice ButtonRequest_ButtonRequestType = 6 |
||||
ButtonRequest_ButtonRequest_ProtectCall ButtonRequest_ButtonRequestType = 7 |
||||
ButtonRequest_ButtonRequest_SignTx ButtonRequest_ButtonRequestType = 8 |
||||
ButtonRequest_ButtonRequest_FirmwareCheck ButtonRequest_ButtonRequestType = 9 |
||||
ButtonRequest_ButtonRequest_Address ButtonRequest_ButtonRequestType = 10 |
||||
ButtonRequest_ButtonRequest_PublicKey ButtonRequest_ButtonRequestType = 11 |
||||
ButtonRequest_ButtonRequest_MnemonicWordCount ButtonRequest_ButtonRequestType = 12 |
||||
ButtonRequest_ButtonRequest_MnemonicInput ButtonRequest_ButtonRequestType = 13 |
||||
ButtonRequest_ButtonRequest_PassphraseType ButtonRequest_ButtonRequestType = 14 |
||||
ButtonRequest_ButtonRequest_UnknownDerivationPath ButtonRequest_ButtonRequestType = 15 |
||||
) |
||||
|
||||
var ButtonRequest_ButtonRequestType_name = map[int32]string{ |
||||
1: "ButtonRequest_Other", |
||||
2: "ButtonRequest_FeeOverThreshold", |
||||
3: "ButtonRequest_ConfirmOutput", |
||||
4: "ButtonRequest_ResetDevice", |
||||
5: "ButtonRequest_ConfirmWord", |
||||
6: "ButtonRequest_WipeDevice", |
||||
7: "ButtonRequest_ProtectCall", |
||||
8: "ButtonRequest_SignTx", |
||||
9: "ButtonRequest_FirmwareCheck", |
||||
10: "ButtonRequest_Address", |
||||
11: "ButtonRequest_PublicKey", |
||||
12: "ButtonRequest_MnemonicWordCount", |
||||
13: "ButtonRequest_MnemonicInput", |
||||
14: "ButtonRequest_PassphraseType", |
||||
15: "ButtonRequest_UnknownDerivationPath", |
||||
} |
||||
|
||||
var ButtonRequest_ButtonRequestType_value = map[string]int32{ |
||||
"ButtonRequest_Other": 1, |
||||
"ButtonRequest_FeeOverThreshold": 2, |
||||
"ButtonRequest_ConfirmOutput": 3, |
||||
"ButtonRequest_ResetDevice": 4, |
||||
"ButtonRequest_ConfirmWord": 5, |
||||
"ButtonRequest_WipeDevice": 6, |
||||
"ButtonRequest_ProtectCall": 7, |
||||
"ButtonRequest_SignTx": 8, |
||||
"ButtonRequest_FirmwareCheck": 9, |
||||
"ButtonRequest_Address": 10, |
||||
"ButtonRequest_PublicKey": 11, |
||||
"ButtonRequest_MnemonicWordCount": 12, |
||||
"ButtonRequest_MnemonicInput": 13, |
||||
"ButtonRequest_PassphraseType": 14, |
||||
"ButtonRequest_UnknownDerivationPath": 15, |
||||
} |
||||
|
||||
func (x ButtonRequest_ButtonRequestType) Enum() *ButtonRequest_ButtonRequestType { |
||||
p := new(ButtonRequest_ButtonRequestType) |
||||
*p = x |
||||
return p |
||||
} |
||||
|
||||
func (x ButtonRequest_ButtonRequestType) String() string { |
||||
return proto.EnumName(ButtonRequest_ButtonRequestType_name, int32(x)) |
||||
} |
||||
|
||||
func (x *ButtonRequest_ButtonRequestType) UnmarshalJSON(data []byte) error { |
||||
value, err := proto.UnmarshalJSONEnum(ButtonRequest_ButtonRequestType_value, data, "ButtonRequest_ButtonRequestType") |
||||
if err != nil { |
||||
return err |
||||
} |
||||
*x = ButtonRequest_ButtonRequestType(value) |
||||
return nil |
||||
} |
||||
|
||||
func (ButtonRequest_ButtonRequestType) EnumDescriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{2, 0} |
||||
} |
||||
|
||||
//*
|
||||
// Type of PIN request
|
||||
type PinMatrixRequest_PinMatrixRequestType int32 |
||||
|
||||
const ( |
||||
PinMatrixRequest_PinMatrixRequestType_Current PinMatrixRequest_PinMatrixRequestType = 1 |
||||
PinMatrixRequest_PinMatrixRequestType_NewFirst PinMatrixRequest_PinMatrixRequestType = 2 |
||||
PinMatrixRequest_PinMatrixRequestType_NewSecond PinMatrixRequest_PinMatrixRequestType = 3 |
||||
) |
||||
|
||||
var PinMatrixRequest_PinMatrixRequestType_name = map[int32]string{ |
||||
1: "PinMatrixRequestType_Current", |
||||
2: "PinMatrixRequestType_NewFirst", |
||||
3: "PinMatrixRequestType_NewSecond", |
||||
} |
||||
|
||||
var PinMatrixRequest_PinMatrixRequestType_value = map[string]int32{ |
||||
"PinMatrixRequestType_Current": 1, |
||||
"PinMatrixRequestType_NewFirst": 2, |
||||
"PinMatrixRequestType_NewSecond": 3, |
||||
} |
||||
|
||||
func (x PinMatrixRequest_PinMatrixRequestType) Enum() *PinMatrixRequest_PinMatrixRequestType { |
||||
p := new(PinMatrixRequest_PinMatrixRequestType) |
||||
*p = x |
||||
return p |
||||
} |
||||
|
||||
func (x PinMatrixRequest_PinMatrixRequestType) String() string { |
||||
return proto.EnumName(PinMatrixRequest_PinMatrixRequestType_name, int32(x)) |
||||
} |
||||
|
||||
func (x *PinMatrixRequest_PinMatrixRequestType) UnmarshalJSON(data []byte) error { |
||||
value, err := proto.UnmarshalJSONEnum(PinMatrixRequest_PinMatrixRequestType_value, data, "PinMatrixRequest_PinMatrixRequestType") |
||||
if err != nil { |
||||
return err |
||||
} |
||||
*x = PinMatrixRequest_PinMatrixRequestType(value) |
||||
return nil |
||||
} |
||||
|
||||
func (PinMatrixRequest_PinMatrixRequestType) EnumDescriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{4, 0} |
||||
} |
||||
|
||||
//*
|
||||
// Response: Success of the previous request
|
||||
// @end
|
||||
type Success struct { |
||||
Message *string `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *Success) Reset() { *m = Success{} } |
||||
func (m *Success) String() string { return proto.CompactTextString(m) } |
||||
func (*Success) ProtoMessage() {} |
||||
func (*Success) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{0} |
||||
} |
||||
|
||||
func (m *Success) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_Success.Unmarshal(m, b) |
||||
} |
||||
func (m *Success) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_Success.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *Success) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_Success.Merge(m, src) |
||||
} |
||||
func (m *Success) XXX_Size() int { |
||||
return xxx_messageInfo_Success.Size(m) |
||||
} |
||||
func (m *Success) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_Success.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_Success proto.InternalMessageInfo |
||||
|
||||
func (m *Success) GetMessage() string { |
||||
if m != nil && m.Message != nil { |
||||
return *m.Message |
||||
} |
||||
return "" |
||||
} |
||||
|
||||
//*
|
||||
// Response: Failure of the previous request
|
||||
// @end
|
||||
type Failure struct { |
||||
Code *Failure_FailureType `protobuf:"varint,1,opt,name=code,enum=hw.trezor.messages.common.Failure_FailureType" json:"code,omitempty"` |
||||
Message *string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *Failure) Reset() { *m = Failure{} } |
||||
func (m *Failure) String() string { return proto.CompactTextString(m) } |
||||
func (*Failure) ProtoMessage() {} |
||||
func (*Failure) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{1} |
||||
} |
||||
|
||||
func (m *Failure) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_Failure.Unmarshal(m, b) |
||||
} |
||||
func (m *Failure) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_Failure.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *Failure) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_Failure.Merge(m, src) |
||||
} |
||||
func (m *Failure) XXX_Size() int { |
||||
return xxx_messageInfo_Failure.Size(m) |
||||
} |
||||
func (m *Failure) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_Failure.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_Failure proto.InternalMessageInfo |
||||
|
||||
func (m *Failure) GetCode() Failure_FailureType { |
||||
if m != nil && m.Code != nil { |
||||
return *m.Code |
||||
} |
||||
return Failure_Failure_UnexpectedMessage |
||||
} |
||||
|
||||
func (m *Failure) GetMessage() string { |
||||
if m != nil && m.Message != nil { |
||||
return *m.Message |
||||
} |
||||
return "" |
||||
} |
||||
|
||||
//*
|
||||
// Response: Device is waiting for HW button press.
|
||||
// @auxstart
|
||||
// @next ButtonAck
|
||||
type ButtonRequest struct { |
||||
Code *ButtonRequest_ButtonRequestType `protobuf:"varint,1,opt,name=code,enum=hw.trezor.messages.common.ButtonRequest_ButtonRequestType" json:"code,omitempty"` |
||||
Data *string `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *ButtonRequest) Reset() { *m = ButtonRequest{} } |
||||
func (m *ButtonRequest) String() string { return proto.CompactTextString(m) } |
||||
func (*ButtonRequest) ProtoMessage() {} |
||||
func (*ButtonRequest) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{2} |
||||
} |
||||
|
||||
func (m *ButtonRequest) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_ButtonRequest.Unmarshal(m, b) |
||||
} |
||||
func (m *ButtonRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_ButtonRequest.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *ButtonRequest) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_ButtonRequest.Merge(m, src) |
||||
} |
||||
func (m *ButtonRequest) XXX_Size() int { |
||||
return xxx_messageInfo_ButtonRequest.Size(m) |
||||
} |
||||
func (m *ButtonRequest) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_ButtonRequest.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_ButtonRequest proto.InternalMessageInfo |
||||
|
||||
func (m *ButtonRequest) GetCode() ButtonRequest_ButtonRequestType { |
||||
if m != nil && m.Code != nil { |
||||
return *m.Code |
||||
} |
||||
return ButtonRequest_ButtonRequest_Other |
||||
} |
||||
|
||||
func (m *ButtonRequest) GetData() string { |
||||
if m != nil && m.Data != nil { |
||||
return *m.Data |
||||
} |
||||
return "" |
||||
} |
||||
|
||||
//*
|
||||
// Request: Computer agrees to wait for HW button press
|
||||
// @auxend
|
||||
type ButtonAck struct { |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *ButtonAck) Reset() { *m = ButtonAck{} } |
||||
func (m *ButtonAck) String() string { return proto.CompactTextString(m) } |
||||
func (*ButtonAck) ProtoMessage() {} |
||||
func (*ButtonAck) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{3} |
||||
} |
||||
|
||||
func (m *ButtonAck) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_ButtonAck.Unmarshal(m, b) |
||||
} |
||||
func (m *ButtonAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_ButtonAck.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *ButtonAck) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_ButtonAck.Merge(m, src) |
||||
} |
||||
func (m *ButtonAck) XXX_Size() int { |
||||
return xxx_messageInfo_ButtonAck.Size(m) |
||||
} |
||||
func (m *ButtonAck) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_ButtonAck.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_ButtonAck proto.InternalMessageInfo |
||||
|
||||
//*
|
||||
// Response: Device is asking computer to show PIN matrix and awaits PIN encoded using this matrix scheme
|
||||
// @auxstart
|
||||
// @next PinMatrixAck
|
||||
type PinMatrixRequest struct { |
||||
Type *PinMatrixRequest_PinMatrixRequestType `protobuf:"varint,1,opt,name=type,enum=hw.trezor.messages.common.PinMatrixRequest_PinMatrixRequestType" json:"type,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *PinMatrixRequest) Reset() { *m = PinMatrixRequest{} } |
||||
func (m *PinMatrixRequest) String() string { return proto.CompactTextString(m) } |
||||
func (*PinMatrixRequest) ProtoMessage() {} |
||||
func (*PinMatrixRequest) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{4} |
||||
} |
||||
|
||||
func (m *PinMatrixRequest) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_PinMatrixRequest.Unmarshal(m, b) |
||||
} |
||||
func (m *PinMatrixRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_PinMatrixRequest.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *PinMatrixRequest) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_PinMatrixRequest.Merge(m, src) |
||||
} |
||||
func (m *PinMatrixRequest) XXX_Size() int { |
||||
return xxx_messageInfo_PinMatrixRequest.Size(m) |
||||
} |
||||
func (m *PinMatrixRequest) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_PinMatrixRequest.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_PinMatrixRequest proto.InternalMessageInfo |
||||
|
||||
func (m *PinMatrixRequest) GetType() PinMatrixRequest_PinMatrixRequestType { |
||||
if m != nil && m.Type != nil { |
||||
return *m.Type |
||||
} |
||||
return PinMatrixRequest_PinMatrixRequestType_Current |
||||
} |
||||
|
||||
//*
|
||||
// Request: Computer responds with encoded PIN
|
||||
// @auxend
|
||||
type PinMatrixAck struct { |
||||
Pin *string `protobuf:"bytes,1,req,name=pin" json:"pin,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *PinMatrixAck) Reset() { *m = PinMatrixAck{} } |
||||
func (m *PinMatrixAck) String() string { return proto.CompactTextString(m) } |
||||
func (*PinMatrixAck) ProtoMessage() {} |
||||
func (*PinMatrixAck) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{5} |
||||
} |
||||
|
||||
func (m *PinMatrixAck) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_PinMatrixAck.Unmarshal(m, b) |
||||
} |
||||
func (m *PinMatrixAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_PinMatrixAck.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *PinMatrixAck) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_PinMatrixAck.Merge(m, src) |
||||
} |
||||
func (m *PinMatrixAck) XXX_Size() int { |
||||
return xxx_messageInfo_PinMatrixAck.Size(m) |
||||
} |
||||
func (m *PinMatrixAck) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_PinMatrixAck.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_PinMatrixAck proto.InternalMessageInfo |
||||
|
||||
func (m *PinMatrixAck) GetPin() string { |
||||
if m != nil && m.Pin != nil { |
||||
return *m.Pin |
||||
} |
||||
return "" |
||||
} |
||||
|
||||
//*
|
||||
// Response: Device awaits encryption passphrase
|
||||
// @auxstart
|
||||
// @next PassphraseAck
|
||||
type PassphraseRequest struct { |
||||
OnDevice *bool `protobuf:"varint,1,opt,name=on_device,json=onDevice" json:"on_device,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *PassphraseRequest) Reset() { *m = PassphraseRequest{} } |
||||
func (m *PassphraseRequest) String() string { return proto.CompactTextString(m) } |
||||
func (*PassphraseRequest) ProtoMessage() {} |
||||
func (*PassphraseRequest) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{6} |
||||
} |
||||
|
||||
func (m *PassphraseRequest) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_PassphraseRequest.Unmarshal(m, b) |
||||
} |
||||
func (m *PassphraseRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_PassphraseRequest.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *PassphraseRequest) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_PassphraseRequest.Merge(m, src) |
||||
} |
||||
func (m *PassphraseRequest) XXX_Size() int { |
||||
return xxx_messageInfo_PassphraseRequest.Size(m) |
||||
} |
||||
func (m *PassphraseRequest) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_PassphraseRequest.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_PassphraseRequest proto.InternalMessageInfo |
||||
|
||||
func (m *PassphraseRequest) GetOnDevice() bool { |
||||
if m != nil && m.OnDevice != nil { |
||||
return *m.OnDevice |
||||
} |
||||
return false |
||||
} |
||||
|
||||
//*
|
||||
// Request: Send passphrase back
|
||||
// @next PassphraseStateRequest
|
||||
type PassphraseAck struct { |
||||
Passphrase *string `protobuf:"bytes,1,opt,name=passphrase" json:"passphrase,omitempty"` |
||||
State []byte `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *PassphraseAck) Reset() { *m = PassphraseAck{} } |
||||
func (m *PassphraseAck) String() string { return proto.CompactTextString(m) } |
||||
func (*PassphraseAck) ProtoMessage() {} |
||||
func (*PassphraseAck) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{7} |
||||
} |
||||
|
||||
func (m *PassphraseAck) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_PassphraseAck.Unmarshal(m, b) |
||||
} |
||||
func (m *PassphraseAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_PassphraseAck.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *PassphraseAck) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_PassphraseAck.Merge(m, src) |
||||
} |
||||
func (m *PassphraseAck) XXX_Size() int { |
||||
return xxx_messageInfo_PassphraseAck.Size(m) |
||||
} |
||||
func (m *PassphraseAck) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_PassphraseAck.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_PassphraseAck proto.InternalMessageInfo |
||||
|
||||
func (m *PassphraseAck) GetPassphrase() string { |
||||
if m != nil && m.Passphrase != nil { |
||||
return *m.Passphrase |
||||
} |
||||
return "" |
||||
} |
||||
|
||||
func (m *PassphraseAck) GetState() []byte { |
||||
if m != nil { |
||||
return m.State |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
//*
|
||||
// Response: Device awaits passphrase state
|
||||
// @next PassphraseStateAck
|
||||
type PassphraseStateRequest struct { |
||||
State []byte `protobuf:"bytes,1,opt,name=state" json:"state,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *PassphraseStateRequest) Reset() { *m = PassphraseStateRequest{} } |
||||
func (m *PassphraseStateRequest) String() string { return proto.CompactTextString(m) } |
||||
func (*PassphraseStateRequest) ProtoMessage() {} |
||||
func (*PassphraseStateRequest) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{8} |
||||
} |
||||
|
||||
func (m *PassphraseStateRequest) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_PassphraseStateRequest.Unmarshal(m, b) |
||||
} |
||||
func (m *PassphraseStateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_PassphraseStateRequest.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *PassphraseStateRequest) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_PassphraseStateRequest.Merge(m, src) |
||||
} |
||||
func (m *PassphraseStateRequest) XXX_Size() int { |
||||
return xxx_messageInfo_PassphraseStateRequest.Size(m) |
||||
} |
||||
func (m *PassphraseStateRequest) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_PassphraseStateRequest.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_PassphraseStateRequest proto.InternalMessageInfo |
||||
|
||||
func (m *PassphraseStateRequest) GetState() []byte { |
||||
if m != nil { |
||||
return m.State |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
//*
|
||||
// Request: Send passphrase state back
|
||||
// @auxend
|
||||
type PassphraseStateAck struct { |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *PassphraseStateAck) Reset() { *m = PassphraseStateAck{} } |
||||
func (m *PassphraseStateAck) String() string { return proto.CompactTextString(m) } |
||||
func (*PassphraseStateAck) ProtoMessage() {} |
||||
func (*PassphraseStateAck) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{9} |
||||
} |
||||
|
||||
func (m *PassphraseStateAck) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_PassphraseStateAck.Unmarshal(m, b) |
||||
} |
||||
func (m *PassphraseStateAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_PassphraseStateAck.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *PassphraseStateAck) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_PassphraseStateAck.Merge(m, src) |
||||
} |
||||
func (m *PassphraseStateAck) XXX_Size() int { |
||||
return xxx_messageInfo_PassphraseStateAck.Size(m) |
||||
} |
||||
func (m *PassphraseStateAck) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_PassphraseStateAck.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_PassphraseStateAck proto.InternalMessageInfo |
||||
|
||||
//*
|
||||
// Structure representing BIP32 (hierarchical deterministic) node
|
||||
// Used for imports of private key into the device and exporting public key out of device
|
||||
// @embed
|
||||
type HDNodeType struct { |
||||
Depth *uint32 `protobuf:"varint,1,req,name=depth" json:"depth,omitempty"` |
||||
Fingerprint *uint32 `protobuf:"varint,2,req,name=fingerprint" json:"fingerprint,omitempty"` |
||||
ChildNum *uint32 `protobuf:"varint,3,req,name=child_num,json=childNum" json:"child_num,omitempty"` |
||||
ChainCode []byte `protobuf:"bytes,4,req,name=chain_code,json=chainCode" json:"chain_code,omitempty"` |
||||
PrivateKey []byte `protobuf:"bytes,5,opt,name=private_key,json=privateKey" json:"private_key,omitempty"` |
||||
PublicKey []byte `protobuf:"bytes,6,opt,name=public_key,json=publicKey" json:"public_key,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *HDNodeType) Reset() { *m = HDNodeType{} } |
||||
func (m *HDNodeType) String() string { return proto.CompactTextString(m) } |
||||
func (*HDNodeType) ProtoMessage() {} |
||||
func (*HDNodeType) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_aaf30d059fdbc38d, []int{10} |
||||
} |
||||
|
||||
func (m *HDNodeType) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_HDNodeType.Unmarshal(m, b) |
||||
} |
||||
func (m *HDNodeType) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_HDNodeType.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *HDNodeType) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_HDNodeType.Merge(m, src) |
||||
} |
||||
func (m *HDNodeType) XXX_Size() int { |
||||
return xxx_messageInfo_HDNodeType.Size(m) |
||||
} |
||||
func (m *HDNodeType) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_HDNodeType.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_HDNodeType proto.InternalMessageInfo |
||||
|
||||
func (m *HDNodeType) GetDepth() uint32 { |
||||
if m != nil && m.Depth != nil { |
||||
return *m.Depth |
||||
} |
||||
return 0 |
||||
} |
||||
|
||||
func (m *HDNodeType) GetFingerprint() uint32 { |
||||
if m != nil && m.Fingerprint != nil { |
||||
return *m.Fingerprint |
||||
} |
||||
return 0 |
||||
} |
||||
|
||||
func (m *HDNodeType) GetChildNum() uint32 { |
||||
if m != nil && m.ChildNum != nil { |
||||
return *m.ChildNum |
||||
} |
||||
return 0 |
||||
} |
||||
|
||||
func (m *HDNodeType) GetChainCode() []byte { |
||||
if m != nil { |
||||
return m.ChainCode |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *HDNodeType) GetPrivateKey() []byte { |
||||
if m != nil { |
||||
return m.PrivateKey |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *HDNodeType) GetPublicKey() []byte { |
||||
if m != nil { |
||||
return m.PublicKey |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func init() { |
||||
proto.RegisterEnum("hw.trezor.messages.common.Failure_FailureType", Failure_FailureType_name, Failure_FailureType_value) |
||||
proto.RegisterEnum("hw.trezor.messages.common.ButtonRequest_ButtonRequestType", ButtonRequest_ButtonRequestType_name, ButtonRequest_ButtonRequestType_value) |
||||
proto.RegisterEnum("hw.trezor.messages.common.PinMatrixRequest_PinMatrixRequestType", PinMatrixRequest_PinMatrixRequestType_name, PinMatrixRequest_PinMatrixRequestType_value) |
||||
proto.RegisterType((*Success)(nil), "hw.trezor.messages.common.Success") |
||||
proto.RegisterType((*Failure)(nil), "hw.trezor.messages.common.Failure") |
||||
proto.RegisterType((*ButtonRequest)(nil), "hw.trezor.messages.common.ButtonRequest") |
||||
proto.RegisterType((*ButtonAck)(nil), "hw.trezor.messages.common.ButtonAck") |
||||
proto.RegisterType((*PinMatrixRequest)(nil), "hw.trezor.messages.common.PinMatrixRequest") |
||||
proto.RegisterType((*PinMatrixAck)(nil), "hw.trezor.messages.common.PinMatrixAck") |
||||
proto.RegisterType((*PassphraseRequest)(nil), "hw.trezor.messages.common.PassphraseRequest") |
||||
proto.RegisterType((*PassphraseAck)(nil), "hw.trezor.messages.common.PassphraseAck") |
||||
proto.RegisterType((*PassphraseStateRequest)(nil), "hw.trezor.messages.common.PassphraseStateRequest") |
||||
proto.RegisterType((*PassphraseStateAck)(nil), "hw.trezor.messages.common.PassphraseStateAck") |
||||
proto.RegisterType((*HDNodeType)(nil), "hw.trezor.messages.common.HDNodeType") |
||||
} |
||||
|
||||
func init() { proto.RegisterFile("messages-common.proto", fileDescriptor_aaf30d059fdbc38d) } |
||||
|
||||
var fileDescriptor_aaf30d059fdbc38d = []byte{ |
||||
// 846 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xcd, 0x52, 0x23, 0x37, |
||||
0x10, 0x2e, 0xff, 0x80, 0xed, 0xb6, 0xd9, 0x08, 0xc5, 0x80, 0x09, 0xb0, 0x38, 0xc3, 0x21, 0x5c, |
||||
0xe2, 0x4a, 0xe5, 0x98, 0x53, 0x58, 0x83, 0x2b, 0xd4, 0x16, 0x86, 0x1a, 0xd8, 0xda, 0xa3, 0x4b, |
||||
0xd1, 0xf4, 0x32, 0x2a, 0xcf, 0x48, 0x13, 0x8d, 0x06, 0xf0, 0x5e, 0xf2, 0x6a, 0x79, 0x89, 0xbc, |
||||
0x42, 0xaa, 0x52, 0xb9, 0xe4, 0x11, 0xb6, 0x34, 0x3f, 0x78, 0xc6, 0x66, 0x39, 0xcd, 0xe8, 0xfb, |
||||
0xbe, 0xee, 0x96, 0xba, 0x3f, 0x09, 0x76, 0x42, 0x8c, 0x63, 0x76, 0x8f, 0xf1, 0x8f, 0x5c, 0x85, |
||||
0xa1, 0x92, 0xa3, 0x48, 0x2b, 0xa3, 0xe8, 0xbe, 0xff, 0x38, 0x32, 0x1a, 0x3f, 0x2b, 0x3d, 0x2a, |
||||
0x04, 0xa3, 0x4c, 0xe0, 0x9c, 0x40, 0xeb, 0x36, 0xe1, 0x1c, 0xe3, 0x98, 0x0e, 0xa0, 0x95, 0xb3, |
||||
0x83, 0xda, 0xb0, 0x76, 0xda, 0x71, 0x8b, 0xa5, 0xf3, 0x77, 0x03, 0x5a, 0x13, 0x26, 0x82, 0x44, |
||||
0x23, 0x7d, 0x07, 0x4d, 0xae, 0xbc, 0x4c, 0xf2, 0xe6, 0xe7, 0xd1, 0xe8, 0xab, 0xa9, 0x47, 0x79, |
||||
0x44, 0xf1, 0xbd, 0x5b, 0x44, 0xe8, 0xa6, 0xb1, 0xe5, 0x4a, 0xf5, 0x6a, 0xa5, 0xff, 0xea, 0xd0, |
||||
0x2d, 0xe9, 0xe9, 0x11, 0xec, 0xe7, 0xcb, 0xd9, 0x07, 0x89, 0x4f, 0x11, 0x72, 0x83, 0xde, 0x55, |
||||
0x26, 0x26, 0x35, 0xfa, 0x1d, 0xec, 0x16, 0xf4, 0xbb, 0xc4, 0x18, 0x25, 0x2f, 0x72, 0x09, 0xa9, |
||||
0xd3, 0x1d, 0xd8, 0x2e, 0xb8, 0x73, 0x66, 0xd8, 0x85, 0xd6, 0x4a, 0x93, 0x06, 0x3d, 0x80, 0xbd, |
||||
0x02, 0x3e, 0xe3, 0x46, 0x28, 0x39, 0x66, 0x92, 0x63, 0x10, 0xa0, 0x47, 0x9a, 0x74, 0x0f, 0xbe, |
||||
0x2d, 0xc8, 0x1b, 0xb1, 0x4c, 0xb6, 0x41, 0x07, 0xd0, 0x2f, 0x11, 0xcb, 0x90, 0x4d, 0xba, 0x0b, |
||||
0xb4, 0xc4, 0x5c, 0xca, 0x07, 0x16, 0x08, 0x8f, 0xb4, 0xe8, 0x21, 0x0c, 0x0a, 0x3c, 0x07, 0x6f, |
||||
0xc5, 0xbd, 0x64, 0x26, 0xd1, 0x48, 0xda, 0x95, 0x7c, 0x5a, 0xd9, 0xf6, 0x67, 0xfb, 0xeb, 0x94, |
||||
0x8f, 0x34, 0x55, 0xe6, 0x42, 0xaa, 0xe4, 0xde, 0x9f, 0x24, 0xd2, 0x8b, 0x09, 0xac, 0x70, 0x97, |
||||
0x52, 0x18, 0xc1, 0x02, 0xf1, 0x19, 0x3d, 0xd2, 0x5d, 0xd9, 0xfa, 0x95, 0x88, 0x43, 0x66, 0xb8, |
||||
0x4f, 0x7a, 0x74, 0x1f, 0x76, 0x0a, 0x62, 0x22, 0x74, 0xf8, 0xc8, 0x34, 0x66, 0xb5, 0xb8, 0xf3, |
||||
0x4f, 0x13, 0xb6, 0xb2, 0xbe, 0xb9, 0xf8, 0x47, 0x82, 0xb1, 0xa1, 0xd3, 0xca, 0x74, 0x7f, 0x79, |
||||
0x65, 0xba, 0x95, 0xb8, 0xea, 0xaa, 0x34, 0x69, 0x0a, 0x4d, 0x8f, 0x19, 0x96, 0x8f, 0x39, 0xfd, |
||||
0x77, 0xfe, 0x6f, 0xc0, 0xf6, 0x9a, 0xde, 0xee, 0xbf, 0x02, 0xce, 0xae, 0x8d, 0x8f, 0x9a, 0xd4, |
||||
0xa8, 0x03, 0x6f, 0xab, 0xc4, 0x04, 0xf1, 0xfa, 0x01, 0xf5, 0x9d, 0xaf, 0x31, 0xf6, 0x55, 0x60, |
||||
0x67, 0x7d, 0x0c, 0x07, 0x55, 0xcd, 0x58, 0xc9, 0x4f, 0x42, 0x87, 0xd7, 0x89, 0x89, 0x12, 0x43, |
||||
0x1a, 0xd6, 0x47, 0x55, 0x81, 0x8b, 0x31, 0x9a, 0x73, 0x7c, 0x10, 0x1c, 0x49, 0x73, 0x9d, 0xce, |
||||
0xe3, 0x3f, 0x2a, 0x6d, 0xa7, 0x7f, 0x08, 0x83, 0x2a, 0xfd, 0x51, 0x44, 0x98, 0x07, 0x6f, 0xae, |
||||
0x07, 0xdf, 0x68, 0x65, 0x90, 0x9b, 0x31, 0x0b, 0x02, 0xd2, 0xb2, 0xa3, 0xae, 0xd2, 0xd6, 0x07, |
||||
0x77, 0x4f, 0xa4, 0xbd, 0xbe, 0xeb, 0x62, 0x3e, 0x63, 0x1f, 0xf9, 0x9c, 0x74, 0xec, 0xe8, 0xaa, |
||||
0x82, 0x33, 0xcf, 0xd3, 0x18, 0x5b, 0x2b, 0x1c, 0xc0, 0xde, 0x4a, 0xd1, 0xe4, 0xf7, 0x40, 0xf0, |
||||
0xf7, 0xb8, 0x20, 0x5d, 0x7a, 0x02, 0xc7, 0x55, 0xf2, 0x4a, 0x62, 0xa8, 0xa4, 0xe0, 0xf6, 0x3c, |
||||
0x63, 0x95, 0x48, 0x43, 0x7a, 0xeb, 0xd5, 0x0b, 0xd1, 0xa5, 0xb4, 0x3d, 0xdb, 0xa2, 0x43, 0x38, |
||||
0x5c, 0x29, 0xc1, 0xe2, 0x38, 0xf2, 0x35, 0x8b, 0xd3, 0xbb, 0x49, 0xde, 0xd0, 0x1f, 0xe0, 0xa4, |
||||
0xaa, 0xf8, 0x20, 0xe7, 0x52, 0x3d, 0xca, 0x73, 0xd4, 0xe2, 0x81, 0xd9, 0xcb, 0x75, 0xc3, 0x8c, |
||||
0x4f, 0xbe, 0x71, 0xba, 0xd0, 0xc9, 0x84, 0x67, 0x7c, 0xee, 0xfc, 0x5b, 0x03, 0x62, 0x2d, 0xca, |
||||
0x8c, 0x16, 0x4f, 0x85, 0xf1, 0xee, 0xa0, 0x69, 0x16, 0x51, 0x61, 0xbc, 0x5f, 0x5f, 0x31, 0xde, |
||||
0x6a, 0xe8, 0x1a, 0x90, 0xd9, 0xcf, 0x66, 0x73, 0xfe, 0x84, 0xfe, 0x4b, 0xac, 0x3d, 0xda, 0x4b, |
||||
0xf8, 0x6c, 0x9c, 0x68, 0x8d, 0xd2, 0x90, 0x1a, 0xfd, 0x1e, 0x8e, 0x5e, 0x54, 0x4c, 0xf1, 0x71, |
||||
0x22, 0x74, 0x6c, 0x48, 0xdd, 0x1a, 0xf3, 0x6b, 0x92, 0x5b, 0xe4, 0x4a, 0x7a, 0xa4, 0xe1, 0x0c, |
||||
0xa1, 0xf7, 0xac, 0x39, 0xe3, 0x73, 0x4a, 0xa0, 0x11, 0x09, 0x39, 0xa8, 0x0d, 0xeb, 0xa7, 0x1d, |
||||
0xd7, 0xfe, 0x3a, 0x3f, 0xc1, 0xf6, 0xb2, 0xaf, 0x45, 0x37, 0x0e, 0xa0, 0xa3, 0xe4, 0xcc, 0x4b, |
||||
0x1d, 0x96, 0xb6, 0xa4, 0xed, 0xb6, 0x95, 0xcc, 0x1c, 0xe7, 0x5c, 0xc0, 0xd6, 0x32, 0xc2, 0x26, |
||||
0x7d, 0x0b, 0x10, 0x3d, 0x03, 0xf9, 0xdb, 0x5d, 0x42, 0x68, 0x1f, 0x36, 0x62, 0xc3, 0x4c, 0xf6, |
||||
0xd8, 0xf6, 0xdc, 0x6c, 0xe1, 0x8c, 0x60, 0x77, 0x99, 0xe6, 0xd6, 0x42, 0x45, 0xf5, 0x67, 0x7d, |
||||
0xad, 0xac, 0xef, 0x03, 0x5d, 0xd1, 0xdb, 0x61, 0xfe, 0x55, 0x03, 0xf8, 0xed, 0x7c, 0xaa, 0xbc, |
||||
0xec, 0xbd, 0xee, 0xc3, 0x86, 0x87, 0x91, 0xf1, 0xd3, 0x13, 0x6e, 0xb9, 0xd9, 0x82, 0x0e, 0xa1, |
||||
0xfb, 0x49, 0xc8, 0x7b, 0xd4, 0x91, 0x16, 0xd2, 0x0c, 0xea, 0x29, 0x57, 0x86, 0xec, 0x81, 0xb9, |
||||
0x2f, 0x02, 0x6f, 0x26, 0x93, 0x70, 0xd0, 0x48, 0xf9, 0x76, 0x0a, 0x4c, 0x93, 0x90, 0x1e, 0x01, |
||||
0x70, 0x9f, 0x09, 0x39, 0x4b, 0x9f, 0xa6, 0xe6, 0xb0, 0x7e, 0xda, 0x73, 0x3b, 0x29, 0x32, 0xb6, |
||||
0x6f, 0xcc, 0x31, 0x74, 0xa3, 0xd4, 0x6f, 0x38, 0x9b, 0xe3, 0x62, 0xb0, 0x91, 0x6e, 0x1a, 0x72, |
||||
0xe8, 0x3d, 0x2e, 0x6c, 0x7c, 0x94, 0xde, 0x8e, 0x94, 0xdf, 0x4c, 0xf9, 0x4e, 0x54, 0xdc, 0x97, |
||||
0x2f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb2, 0x7d, 0x20, 0xa6, 0x35, 0x07, 0x00, 0x00, |
||||
} |
@ -0,0 +1,147 @@ |
||||
// This file originates from the SatoshiLabs Trezor `common` repository at: |
||||
// https://github.com/trezor/trezor-common/blob/master/protob/messages-common.proto |
||||
// dated 28.05.2019, commit 893fd219d4a01bcffa0cd9cfa631856371ec5aa9. |
||||
|
||||
syntax = "proto2"; |
||||
package hw.trezor.messages.common; |
||||
|
||||
/** |
||||
* Response: Success of the previous request |
||||
* @end |
||||
*/ |
||||
message Success { |
||||
optional string message = 1; // human readable description of action or request-specific payload |
||||
} |
||||
|
||||
/** |
||||
* Response: Failure of the previous request |
||||
* @end |
||||
*/ |
||||
message Failure { |
||||
optional FailureType code = 1; // computer-readable definition of the error state |
||||
optional string message = 2; // human-readable message of the error state |
||||
enum FailureType { |
||||
Failure_UnexpectedMessage = 1; |
||||
Failure_ButtonExpected = 2; |
||||
Failure_DataError = 3; |
||||
Failure_ActionCancelled = 4; |
||||
Failure_PinExpected = 5; |
||||
Failure_PinCancelled = 6; |
||||
Failure_PinInvalid = 7; |
||||
Failure_InvalidSignature = 8; |
||||
Failure_ProcessError = 9; |
||||
Failure_NotEnoughFunds = 10; |
||||
Failure_NotInitialized = 11; |
||||
Failure_PinMismatch = 12; |
||||
Failure_FirmwareError = 99; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Response: Device is waiting for HW button press. |
||||
* @auxstart |
||||
* @next ButtonAck |
||||
*/ |
||||
message ButtonRequest { |
||||
optional ButtonRequestType code = 1; |
||||
optional string data = 2; |
||||
/** |
||||
* Type of button request |
||||
*/ |
||||
enum ButtonRequestType { |
||||
ButtonRequest_Other = 1; |
||||
ButtonRequest_FeeOverThreshold = 2; |
||||
ButtonRequest_ConfirmOutput = 3; |
||||
ButtonRequest_ResetDevice = 4; |
||||
ButtonRequest_ConfirmWord = 5; |
||||
ButtonRequest_WipeDevice = 6; |
||||
ButtonRequest_ProtectCall = 7; |
||||
ButtonRequest_SignTx = 8; |
||||
ButtonRequest_FirmwareCheck = 9; |
||||
ButtonRequest_Address = 10; |
||||
ButtonRequest_PublicKey = 11; |
||||
ButtonRequest_MnemonicWordCount = 12; |
||||
ButtonRequest_MnemonicInput = 13; |
||||
ButtonRequest_PassphraseType = 14; |
||||
ButtonRequest_UnknownDerivationPath = 15; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Request: Computer agrees to wait for HW button press |
||||
* @auxend |
||||
*/ |
||||
message ButtonAck { |
||||
} |
||||
|
||||
/** |
||||
* Response: Device is asking computer to show PIN matrix and awaits PIN encoded using this matrix scheme |
||||
* @auxstart |
||||
* @next PinMatrixAck |
||||
*/ |
||||
message PinMatrixRequest { |
||||
optional PinMatrixRequestType type = 1; |
||||
/** |
||||
* Type of PIN request |
||||
*/ |
||||
enum PinMatrixRequestType { |
||||
PinMatrixRequestType_Current = 1; |
||||
PinMatrixRequestType_NewFirst = 2; |
||||
PinMatrixRequestType_NewSecond = 3; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Request: Computer responds with encoded PIN |
||||
* @auxend |
||||
*/ |
||||
message PinMatrixAck { |
||||
required string pin = 1; // matrix encoded PIN entered by user |
||||
} |
||||
|
||||
/** |
||||
* Response: Device awaits encryption passphrase |
||||
* @auxstart |
||||
* @next PassphraseAck |
||||
*/ |
||||
message PassphraseRequest { |
||||
optional bool on_device = 1; // passphrase is being entered on the device |
||||
} |
||||
|
||||
/** |
||||
* Request: Send passphrase back |
||||
* @next PassphraseStateRequest |
||||
*/ |
||||
message PassphraseAck { |
||||
optional string passphrase = 1; |
||||
optional bytes state = 2; // expected device state |
||||
} |
||||
|
||||
/** |
||||
* Response: Device awaits passphrase state |
||||
* @next PassphraseStateAck |
||||
*/ |
||||
message PassphraseStateRequest { |
||||
optional bytes state = 1; // actual device state |
||||
} |
||||
|
||||
/** |
||||
* Request: Send passphrase state back |
||||
* @auxend |
||||
*/ |
||||
message PassphraseStateAck { |
||||
} |
||||
|
||||
/** |
||||
* Structure representing BIP32 (hierarchical deterministic) node |
||||
* Used for imports of private key into the device and exporting public key out of device |
||||
* @embed |
||||
*/ |
||||
message HDNodeType { |
||||
required uint32 depth = 1; |
||||
required uint32 fingerprint = 2; |
||||
required uint32 child_num = 3; |
||||
required bytes chain_code = 4; |
||||
optional bytes private_key = 5; |
||||
optional bytes public_key = 6; |
||||
} |
@ -0,0 +1,698 @@ |
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// source: messages-ethereum.proto
|
||||
|
||||
package trezor |
||||
|
||||
import ( |
||||
fmt "fmt" |
||||
math "math" |
||||
|
||||
proto "github.com/golang/protobuf/proto" |
||||
) |
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
var _ = proto.Marshal |
||||
var _ = fmt.Errorf |
||||
var _ = math.Inf |
||||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the proto package it is being compiled against.
|
||||
// A compilation error at this line likely means your copy of the
|
||||
// proto package needs to be updated.
|
||||
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
|
||||
|
||||
//*
|
||||
// Request: Ask device for public key corresponding to address_n path
|
||||
// @start
|
||||
// @next EthereumPublicKey
|
||||
// @next Failure
|
||||
type EthereumGetPublicKey struct { |
||||
AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` |
||||
ShowDisplay *bool `protobuf:"varint,2,opt,name=show_display,json=showDisplay" json:"show_display,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *EthereumGetPublicKey) Reset() { *m = EthereumGetPublicKey{} } |
||||
func (m *EthereumGetPublicKey) String() string { return proto.CompactTextString(m) } |
||||
func (*EthereumGetPublicKey) ProtoMessage() {} |
||||
func (*EthereumGetPublicKey) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_cb33f46ba915f15c, []int{0} |
||||
} |
||||
|
||||
func (m *EthereumGetPublicKey) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_EthereumGetPublicKey.Unmarshal(m, b) |
||||
} |
||||
func (m *EthereumGetPublicKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_EthereumGetPublicKey.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *EthereumGetPublicKey) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_EthereumGetPublicKey.Merge(m, src) |
||||
} |
||||
func (m *EthereumGetPublicKey) XXX_Size() int { |
||||
return xxx_messageInfo_EthereumGetPublicKey.Size(m) |
||||
} |
||||
func (m *EthereumGetPublicKey) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_EthereumGetPublicKey.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_EthereumGetPublicKey proto.InternalMessageInfo |
||||
|
||||
func (m *EthereumGetPublicKey) GetAddressN() []uint32 { |
||||
if m != nil { |
||||
return m.AddressN |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumGetPublicKey) GetShowDisplay() bool { |
||||
if m != nil && m.ShowDisplay != nil { |
||||
return *m.ShowDisplay |
||||
} |
||||
return false |
||||
} |
||||
|
||||
//*
|
||||
// Response: Contains public key derived from device private seed
|
||||
// @end
|
||||
type EthereumPublicKey struct { |
||||
Node *HDNodeType `protobuf:"bytes,1,opt,name=node" json:"node,omitempty"` |
||||
Xpub *string `protobuf:"bytes,2,opt,name=xpub" json:"xpub,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *EthereumPublicKey) Reset() { *m = EthereumPublicKey{} } |
||||
func (m *EthereumPublicKey) String() string { return proto.CompactTextString(m) } |
||||
func (*EthereumPublicKey) ProtoMessage() {} |
||||
func (*EthereumPublicKey) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_cb33f46ba915f15c, []int{1} |
||||
} |
||||
|
||||
func (m *EthereumPublicKey) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_EthereumPublicKey.Unmarshal(m, b) |
||||
} |
||||
func (m *EthereumPublicKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_EthereumPublicKey.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *EthereumPublicKey) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_EthereumPublicKey.Merge(m, src) |
||||
} |
||||
func (m *EthereumPublicKey) XXX_Size() int { |
||||
return xxx_messageInfo_EthereumPublicKey.Size(m) |
||||
} |
||||
func (m *EthereumPublicKey) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_EthereumPublicKey.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_EthereumPublicKey proto.InternalMessageInfo |
||||
|
||||
func (m *EthereumPublicKey) GetNode() *HDNodeType { |
||||
if m != nil { |
||||
return m.Node |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumPublicKey) GetXpub() string { |
||||
if m != nil && m.Xpub != nil { |
||||
return *m.Xpub |
||||
} |
||||
return "" |
||||
} |
||||
|
||||
//*
|
||||
// Request: Ask device for Ethereum address corresponding to address_n path
|
||||
// @start
|
||||
// @next EthereumAddress
|
||||
// @next Failure
|
||||
type EthereumGetAddress struct { |
||||
AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` |
||||
ShowDisplay *bool `protobuf:"varint,2,opt,name=show_display,json=showDisplay" json:"show_display,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *EthereumGetAddress) Reset() { *m = EthereumGetAddress{} } |
||||
func (m *EthereumGetAddress) String() string { return proto.CompactTextString(m) } |
||||
func (*EthereumGetAddress) ProtoMessage() {} |
||||
func (*EthereumGetAddress) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_cb33f46ba915f15c, []int{2} |
||||
} |
||||
|
||||
func (m *EthereumGetAddress) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_EthereumGetAddress.Unmarshal(m, b) |
||||
} |
||||
func (m *EthereumGetAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_EthereumGetAddress.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *EthereumGetAddress) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_EthereumGetAddress.Merge(m, src) |
||||
} |
||||
func (m *EthereumGetAddress) XXX_Size() int { |
||||
return xxx_messageInfo_EthereumGetAddress.Size(m) |
||||
} |
||||
func (m *EthereumGetAddress) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_EthereumGetAddress.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_EthereumGetAddress proto.InternalMessageInfo |
||||
|
||||
func (m *EthereumGetAddress) GetAddressN() []uint32 { |
||||
if m != nil { |
||||
return m.AddressN |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumGetAddress) GetShowDisplay() bool { |
||||
if m != nil && m.ShowDisplay != nil { |
||||
return *m.ShowDisplay |
||||
} |
||||
return false |
||||
} |
||||
|
||||
//*
|
||||
// Response: Contains an Ethereum address derived from device private seed
|
||||
// @end
|
||||
type EthereumAddress struct { |
||||
AddressBin []byte `protobuf:"bytes,1,opt,name=addressBin" json:"addressBin,omitempty"` |
||||
AddressHex *string `protobuf:"bytes,2,opt,name=addressHex" json:"addressHex,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *EthereumAddress) Reset() { *m = EthereumAddress{} } |
||||
func (m *EthereumAddress) String() string { return proto.CompactTextString(m) } |
||||
func (*EthereumAddress) ProtoMessage() {} |
||||
func (*EthereumAddress) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_cb33f46ba915f15c, []int{3} |
||||
} |
||||
|
||||
func (m *EthereumAddress) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_EthereumAddress.Unmarshal(m, b) |
||||
} |
||||
func (m *EthereumAddress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_EthereumAddress.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *EthereumAddress) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_EthereumAddress.Merge(m, src) |
||||
} |
||||
func (m *EthereumAddress) XXX_Size() int { |
||||
return xxx_messageInfo_EthereumAddress.Size(m) |
||||
} |
||||
func (m *EthereumAddress) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_EthereumAddress.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_EthereumAddress proto.InternalMessageInfo |
||||
|
||||
func (m *EthereumAddress) GetAddressBin() []byte { |
||||
if m != nil { |
||||
return m.AddressBin |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumAddress) GetAddressHex() string { |
||||
if m != nil && m.AddressHex != nil { |
||||
return *m.AddressHex |
||||
} |
||||
return "" |
||||
} |
||||
|
||||
//*
|
||||
// Request: Ask device to sign transaction
|
||||
// All fields are optional from the protocol's point of view. Each field defaults to value `0` if missing.
|
||||
// Note: the first at most 1024 bytes of data MUST be transmitted as part of this message.
|
||||
// @start
|
||||
// @next EthereumTxRequest
|
||||
// @next Failure
|
||||
type EthereumSignTx struct { |
||||
AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` |
||||
Nonce []byte `protobuf:"bytes,2,opt,name=nonce" json:"nonce,omitempty"` |
||||
GasPrice []byte `protobuf:"bytes,3,opt,name=gas_price,json=gasPrice" json:"gas_price,omitempty"` |
||||
GasLimit []byte `protobuf:"bytes,4,opt,name=gas_limit,json=gasLimit" json:"gas_limit,omitempty"` |
||||
ToBin []byte `protobuf:"bytes,5,opt,name=toBin" json:"toBin,omitempty"` |
||||
ToHex *string `protobuf:"bytes,11,opt,name=toHex" json:"toHex,omitempty"` |
||||
Value []byte `protobuf:"bytes,6,opt,name=value" json:"value,omitempty"` |
||||
DataInitialChunk []byte `protobuf:"bytes,7,opt,name=data_initial_chunk,json=dataInitialChunk" json:"data_initial_chunk,omitempty"` |
||||
DataLength *uint32 `protobuf:"varint,8,opt,name=data_length,json=dataLength" json:"data_length,omitempty"` |
||||
ChainId *uint32 `protobuf:"varint,9,opt,name=chain_id,json=chainId" json:"chain_id,omitempty"` |
||||
TxType *uint32 `protobuf:"varint,10,opt,name=tx_type,json=txType" json:"tx_type,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *EthereumSignTx) Reset() { *m = EthereumSignTx{} } |
||||
func (m *EthereumSignTx) String() string { return proto.CompactTextString(m) } |
||||
func (*EthereumSignTx) ProtoMessage() {} |
||||
func (*EthereumSignTx) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_cb33f46ba915f15c, []int{4} |
||||
} |
||||
|
||||
func (m *EthereumSignTx) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_EthereumSignTx.Unmarshal(m, b) |
||||
} |
||||
func (m *EthereumSignTx) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_EthereumSignTx.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *EthereumSignTx) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_EthereumSignTx.Merge(m, src) |
||||
} |
||||
func (m *EthereumSignTx) XXX_Size() int { |
||||
return xxx_messageInfo_EthereumSignTx.Size(m) |
||||
} |
||||
func (m *EthereumSignTx) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_EthereumSignTx.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_EthereumSignTx proto.InternalMessageInfo |
||||
|
||||
func (m *EthereumSignTx) GetAddressN() []uint32 { |
||||
if m != nil { |
||||
return m.AddressN |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumSignTx) GetNonce() []byte { |
||||
if m != nil { |
||||
return m.Nonce |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumSignTx) GetGasPrice() []byte { |
||||
if m != nil { |
||||
return m.GasPrice |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumSignTx) GetGasLimit() []byte { |
||||
if m != nil { |
||||
return m.GasLimit |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumSignTx) GetToBin() []byte { |
||||
if m != nil { |
||||
return m.ToBin |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumSignTx) GetToHex() string { |
||||
if m != nil && m.ToHex != nil { |
||||
return *m.ToHex |
||||
} |
||||
return "" |
||||
} |
||||
|
||||
func (m *EthereumSignTx) GetValue() []byte { |
||||
if m != nil { |
||||
return m.Value |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumSignTx) GetDataInitialChunk() []byte { |
||||
if m != nil { |
||||
return m.DataInitialChunk |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumSignTx) GetDataLength() uint32 { |
||||
if m != nil && m.DataLength != nil { |
||||
return *m.DataLength |
||||
} |
||||
return 0 |
||||
} |
||||
|
||||
func (m *EthereumSignTx) GetChainId() uint32 { |
||||
if m != nil && m.ChainId != nil { |
||||
return *m.ChainId |
||||
} |
||||
return 0 |
||||
} |
||||
|
||||
func (m *EthereumSignTx) GetTxType() uint32 { |
||||
if m != nil && m.TxType != nil { |
||||
return *m.TxType |
||||
} |
||||
return 0 |
||||
} |
||||
|
||||
//*
|
||||
// Response: Device asks for more data from transaction payload, or returns the signature.
|
||||
// If data_length is set, device awaits that many more bytes of payload.
|
||||
// Otherwise, the signature_* fields contain the computed transaction signature. All three fields will be present.
|
||||
// @end
|
||||
// @next EthereumTxAck
|
||||
type EthereumTxRequest struct { |
||||
DataLength *uint32 `protobuf:"varint,1,opt,name=data_length,json=dataLength" json:"data_length,omitempty"` |
||||
SignatureV *uint32 `protobuf:"varint,2,opt,name=signature_v,json=signatureV" json:"signature_v,omitempty"` |
||||
SignatureR []byte `protobuf:"bytes,3,opt,name=signature_r,json=signatureR" json:"signature_r,omitempty"` |
||||
SignatureS []byte `protobuf:"bytes,4,opt,name=signature_s,json=signatureS" json:"signature_s,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *EthereumTxRequest) Reset() { *m = EthereumTxRequest{} } |
||||
func (m *EthereumTxRequest) String() string { return proto.CompactTextString(m) } |
||||
func (*EthereumTxRequest) ProtoMessage() {} |
||||
func (*EthereumTxRequest) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_cb33f46ba915f15c, []int{5} |
||||
} |
||||
|
||||
func (m *EthereumTxRequest) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_EthereumTxRequest.Unmarshal(m, b) |
||||
} |
||||
func (m *EthereumTxRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_EthereumTxRequest.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *EthereumTxRequest) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_EthereumTxRequest.Merge(m, src) |
||||
} |
||||
func (m *EthereumTxRequest) XXX_Size() int { |
||||
return xxx_messageInfo_EthereumTxRequest.Size(m) |
||||
} |
||||
func (m *EthereumTxRequest) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_EthereumTxRequest.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_EthereumTxRequest proto.InternalMessageInfo |
||||
|
||||
func (m *EthereumTxRequest) GetDataLength() uint32 { |
||||
if m != nil && m.DataLength != nil { |
||||
return *m.DataLength |
||||
} |
||||
return 0 |
||||
} |
||||
|
||||
func (m *EthereumTxRequest) GetSignatureV() uint32 { |
||||
if m != nil && m.SignatureV != nil { |
||||
return *m.SignatureV |
||||
} |
||||
return 0 |
||||
} |
||||
|
||||
func (m *EthereumTxRequest) GetSignatureR() []byte { |
||||
if m != nil { |
||||
return m.SignatureR |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumTxRequest) GetSignatureS() []byte { |
||||
if m != nil { |
||||
return m.SignatureS |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
//*
|
||||
// Request: Transaction payload data.
|
||||
// @next EthereumTxRequest
|
||||
type EthereumTxAck struct { |
||||
DataChunk []byte `protobuf:"bytes,1,opt,name=data_chunk,json=dataChunk" json:"data_chunk,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *EthereumTxAck) Reset() { *m = EthereumTxAck{} } |
||||
func (m *EthereumTxAck) String() string { return proto.CompactTextString(m) } |
||||
func (*EthereumTxAck) ProtoMessage() {} |
||||
func (*EthereumTxAck) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_cb33f46ba915f15c, []int{6} |
||||
} |
||||
|
||||
func (m *EthereumTxAck) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_EthereumTxAck.Unmarshal(m, b) |
||||
} |
||||
func (m *EthereumTxAck) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_EthereumTxAck.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *EthereumTxAck) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_EthereumTxAck.Merge(m, src) |
||||
} |
||||
func (m *EthereumTxAck) XXX_Size() int { |
||||
return xxx_messageInfo_EthereumTxAck.Size(m) |
||||
} |
||||
func (m *EthereumTxAck) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_EthereumTxAck.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_EthereumTxAck proto.InternalMessageInfo |
||||
|
||||
func (m *EthereumTxAck) GetDataChunk() []byte { |
||||
if m != nil { |
||||
return m.DataChunk |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
//*
|
||||
// Request: Ask device to sign message
|
||||
// @start
|
||||
// @next EthereumMessageSignature
|
||||
// @next Failure
|
||||
type EthereumSignMessage struct { |
||||
AddressN []uint32 `protobuf:"varint,1,rep,name=address_n,json=addressN" json:"address_n,omitempty"` |
||||
Message []byte `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *EthereumSignMessage) Reset() { *m = EthereumSignMessage{} } |
||||
func (m *EthereumSignMessage) String() string { return proto.CompactTextString(m) } |
||||
func (*EthereumSignMessage) ProtoMessage() {} |
||||
func (*EthereumSignMessage) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_cb33f46ba915f15c, []int{7} |
||||
} |
||||
|
||||
func (m *EthereumSignMessage) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_EthereumSignMessage.Unmarshal(m, b) |
||||
} |
||||
func (m *EthereumSignMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_EthereumSignMessage.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *EthereumSignMessage) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_EthereumSignMessage.Merge(m, src) |
||||
} |
||||
func (m *EthereumSignMessage) XXX_Size() int { |
||||
return xxx_messageInfo_EthereumSignMessage.Size(m) |
||||
} |
||||
func (m *EthereumSignMessage) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_EthereumSignMessage.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_EthereumSignMessage proto.InternalMessageInfo |
||||
|
||||
func (m *EthereumSignMessage) GetAddressN() []uint32 { |
||||
if m != nil { |
||||
return m.AddressN |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumSignMessage) GetMessage() []byte { |
||||
if m != nil { |
||||
return m.Message |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
//*
|
||||
// Response: Signed message
|
||||
// @end
|
||||
type EthereumMessageSignature struct { |
||||
AddressBin []byte `protobuf:"bytes,1,opt,name=addressBin" json:"addressBin,omitempty"` |
||||
Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` |
||||
AddressHex *string `protobuf:"bytes,3,opt,name=addressHex" json:"addressHex,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *EthereumMessageSignature) Reset() { *m = EthereumMessageSignature{} } |
||||
func (m *EthereumMessageSignature) String() string { return proto.CompactTextString(m) } |
||||
func (*EthereumMessageSignature) ProtoMessage() {} |
||||
func (*EthereumMessageSignature) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_cb33f46ba915f15c, []int{8} |
||||
} |
||||
|
||||
func (m *EthereumMessageSignature) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_EthereumMessageSignature.Unmarshal(m, b) |
||||
} |
||||
func (m *EthereumMessageSignature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_EthereumMessageSignature.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *EthereumMessageSignature) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_EthereumMessageSignature.Merge(m, src) |
||||
} |
||||
func (m *EthereumMessageSignature) XXX_Size() int { |
||||
return xxx_messageInfo_EthereumMessageSignature.Size(m) |
||||
} |
||||
func (m *EthereumMessageSignature) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_EthereumMessageSignature.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_EthereumMessageSignature proto.InternalMessageInfo |
||||
|
||||
func (m *EthereumMessageSignature) GetAddressBin() []byte { |
||||
if m != nil { |
||||
return m.AddressBin |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumMessageSignature) GetSignature() []byte { |
||||
if m != nil { |
||||
return m.Signature |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumMessageSignature) GetAddressHex() string { |
||||
if m != nil && m.AddressHex != nil { |
||||
return *m.AddressHex |
||||
} |
||||
return "" |
||||
} |
||||
|
||||
//*
|
||||
// Request: Ask device to verify message
|
||||
// @start
|
||||
// @next Success
|
||||
// @next Failure
|
||||
type EthereumVerifyMessage struct { |
||||
AddressBin []byte `protobuf:"bytes,1,opt,name=addressBin" json:"addressBin,omitempty"` |
||||
Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` |
||||
Message []byte `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` |
||||
AddressHex *string `protobuf:"bytes,4,opt,name=addressHex" json:"addressHex,omitempty"` |
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"` |
||||
XXX_unrecognized []byte `json:"-"` |
||||
XXX_sizecache int32 `json:"-"` |
||||
} |
||||
|
||||
func (m *EthereumVerifyMessage) Reset() { *m = EthereumVerifyMessage{} } |
||||
func (m *EthereumVerifyMessage) String() string { return proto.CompactTextString(m) } |
||||
func (*EthereumVerifyMessage) ProtoMessage() {} |
||||
func (*EthereumVerifyMessage) Descriptor() ([]byte, []int) { |
||||
return fileDescriptor_cb33f46ba915f15c, []int{9} |
||||
} |
||||
|
||||
func (m *EthereumVerifyMessage) XXX_Unmarshal(b []byte) error { |
||||
return xxx_messageInfo_EthereumVerifyMessage.Unmarshal(m, b) |
||||
} |
||||
func (m *EthereumVerifyMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { |
||||
return xxx_messageInfo_EthereumVerifyMessage.Marshal(b, m, deterministic) |
||||
} |
||||
func (m *EthereumVerifyMessage) XXX_Merge(src proto.Message) { |
||||
xxx_messageInfo_EthereumVerifyMessage.Merge(m, src) |
||||
} |
||||
func (m *EthereumVerifyMessage) XXX_Size() int { |
||||
return xxx_messageInfo_EthereumVerifyMessage.Size(m) |
||||
} |
||||
func (m *EthereumVerifyMessage) XXX_DiscardUnknown() { |
||||
xxx_messageInfo_EthereumVerifyMessage.DiscardUnknown(m) |
||||
} |
||||
|
||||
var xxx_messageInfo_EthereumVerifyMessage proto.InternalMessageInfo |
||||
|
||||
func (m *EthereumVerifyMessage) GetAddressBin() []byte { |
||||
if m != nil { |
||||
return m.AddressBin |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumVerifyMessage) GetSignature() []byte { |
||||
if m != nil { |
||||
return m.Signature |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumVerifyMessage) GetMessage() []byte { |
||||
if m != nil { |
||||
return m.Message |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
func (m *EthereumVerifyMessage) GetAddressHex() string { |
||||
if m != nil && m.AddressHex != nil { |
||||
return *m.AddressHex |
||||
} |
||||
return "" |
||||
} |
||||
|
||||
func init() { |
||||
proto.RegisterType((*EthereumGetPublicKey)(nil), "hw.trezor.messages.ethereum.EthereumGetPublicKey") |
||||
proto.RegisterType((*EthereumPublicKey)(nil), "hw.trezor.messages.ethereum.EthereumPublicKey") |
||||
proto.RegisterType((*EthereumGetAddress)(nil), "hw.trezor.messages.ethereum.EthereumGetAddress") |
||||
proto.RegisterType((*EthereumAddress)(nil), "hw.trezor.messages.ethereum.EthereumAddress") |
||||
proto.RegisterType((*EthereumSignTx)(nil), "hw.trezor.messages.ethereum.EthereumSignTx") |
||||
proto.RegisterType((*EthereumTxRequest)(nil), "hw.trezor.messages.ethereum.EthereumTxRequest") |
||||
proto.RegisterType((*EthereumTxAck)(nil), "hw.trezor.messages.ethereum.EthereumTxAck") |
||||
proto.RegisterType((*EthereumSignMessage)(nil), "hw.trezor.messages.ethereum.EthereumSignMessage") |
||||
proto.RegisterType((*EthereumMessageSignature)(nil), "hw.trezor.messages.ethereum.EthereumMessageSignature") |
||||
proto.RegisterType((*EthereumVerifyMessage)(nil), "hw.trezor.messages.ethereum.EthereumVerifyMessage") |
||||
} |
||||
|
||||
func init() { proto.RegisterFile("messages-ethereum.proto", fileDescriptor_cb33f46ba915f15c) } |
||||
|
||||
var fileDescriptor_cb33f46ba915f15c = []byte{ |
||||
// 593 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4d, 0x6f, 0xd3, 0x40, |
||||
0x10, 0x95, 0x9b, 0xb4, 0x49, 0x26, 0x0d, 0x1f, 0xa6, 0x55, 0x17, 0x0a, 0x34, 0x18, 0x21, 0xe5, |
||||
0x00, 0x3e, 0x70, 0x43, 0xe2, 0xd2, 0x52, 0x44, 0x2b, 0x4a, 0x55, 0xdc, 0xa8, 0x57, 0x6b, 0x63, |
||||
0x6f, 0xe3, 0x55, 0x9d, 0xdd, 0xe0, 0x5d, 0xb7, 0x0e, 0x7f, 0x82, 0x23, 0xff, 0x87, 0x5f, 0x86, |
||||
0xf6, 0x2b, 0x71, 0x52, 0x54, 0x0e, 0xbd, 0x65, 0xde, 0xbc, 0x7d, 0xf3, 0x66, 0xf4, 0x62, 0xd8, |
||||
0x99, 0x10, 0x21, 0xf0, 0x98, 0x88, 0x77, 0x44, 0x66, 0xa4, 0x20, 0xe5, 0x24, 0x9c, 0x16, 0x5c, |
||||
0x72, 0x7f, 0x37, 0xbb, 0x09, 0x65, 0x41, 0x7e, 0xf2, 0x22, 0x74, 0x94, 0xd0, 0x51, 0x9e, 0x6d, |
||||
0xcf, 0x5f, 0x25, 0x7c, 0x32, 0xe1, 0xcc, 0xbc, 0x09, 0x2e, 0x60, 0xeb, 0xb3, 0xa5, 0x7c, 0x21, |
||||
0xf2, 0xac, 0x1c, 0xe5, 0x34, 0xf9, 0x4a, 0x66, 0xfe, 0x2e, 0x74, 0x70, 0x9a, 0x16, 0x44, 0x88, |
||||
0x98, 0x21, 0xaf, 0xdf, 0x18, 0xf4, 0xa2, 0xb6, 0x05, 0x4e, 0xfd, 0x57, 0xb0, 0x29, 0x32, 0x7e, |
||||
0x13, 0xa7, 0x54, 0x4c, 0x73, 0x3c, 0x43, 0x6b, 0x7d, 0x6f, 0xd0, 0x8e, 0xba, 0x0a, 0x3b, 0x34, |
||||
0x50, 0x30, 0x82, 0xc7, 0x4e, 0x77, 0x21, 0xfa, 0x01, 0x9a, 0x8c, 0xa7, 0x04, 0x79, 0x7d, 0x6f, |
||||
0xd0, 0x7d, 0xff, 0x26, 0xfc, 0x87, 0x5f, 0x6b, 0xee, 0xe8, 0xf0, 0x94, 0xa7, 0x64, 0x38, 0x9b, |
||||
0x92, 0x48, 0x3f, 0xf1, 0x7d, 0x68, 0x56, 0xd3, 0x72, 0xa4, 0x47, 0x75, 0x22, 0xfd, 0x3b, 0x18, |
||||
0x82, 0x5f, 0xf3, 0xbe, 0x6f, 0xdc, 0xdd, 0xdb, 0xf9, 0x77, 0x78, 0xe8, 0x54, 0x9d, 0xe4, 0x4b, |
||||
0x00, 0xab, 0x70, 0x40, 0x99, 0x76, 0xbf, 0x19, 0xd5, 0x90, 0x5a, 0xff, 0x88, 0x54, 0xd6, 0x62, |
||||
0x0d, 0x09, 0xfe, 0xac, 0xc1, 0x03, 0xa7, 0x79, 0x4e, 0xc7, 0x6c, 0x58, 0xdd, 0xed, 0x72, 0x0b, |
||||
0xd6, 0x19, 0x67, 0x09, 0xd1, 0x52, 0x9b, 0x91, 0x29, 0xd4, 0x93, 0x31, 0x16, 0xf1, 0xb4, 0xa0, |
||||
0x09, 0x41, 0x0d, 0xdd, 0x69, 0x8f, 0xb1, 0x38, 0x53, 0xb5, 0x6b, 0xe6, 0x74, 0x42, 0x25, 0x6a, |
||||
0xce, 0x9b, 0x27, 0xaa, 0x56, 0x7a, 0x92, 0x2b, 0xeb, 0xeb, 0x46, 0x4f, 0x17, 0x06, 0x55, 0x86, |
||||
0xbb, 0xda, 0xb0, 0x29, 0x14, 0x7a, 0x8d, 0xf3, 0x92, 0xa0, 0x0d, 0xc3, 0xd5, 0x85, 0xff, 0x16, |
||||
0xfc, 0x14, 0x4b, 0x1c, 0x53, 0x46, 0x25, 0xc5, 0x79, 0x9c, 0x64, 0x25, 0xbb, 0x42, 0x2d, 0x4d, |
||||
0x79, 0xa4, 0x3a, 0xc7, 0xa6, 0xf1, 0x49, 0xe1, 0xfe, 0x1e, 0x74, 0x35, 0x3b, 0x27, 0x6c, 0x2c, |
||||
0x33, 0xd4, 0xee, 0x7b, 0x83, 0x5e, 0x04, 0x0a, 0x3a, 0xd1, 0x88, 0xff, 0x14, 0xda, 0x49, 0x86, |
||||
0x29, 0x8b, 0x69, 0x8a, 0x3a, 0xba, 0xdb, 0xd2, 0xf5, 0x71, 0xea, 0xef, 0x40, 0x4b, 0x56, 0xb1, |
||||
0x9c, 0x4d, 0x09, 0x02, 0xdd, 0xd9, 0x90, 0x95, 0xca, 0x41, 0xf0, 0xdb, 0x5b, 0x44, 0x6a, 0x58, |
||||
0x45, 0xe4, 0x47, 0x49, 0x84, 0x5c, 0x1d, 0xe5, 0xdd, 0x1a, 0xb5, 0x07, 0x5d, 0x41, 0xc7, 0x0c, |
||||
0xcb, 0xb2, 0x20, 0xf1, 0xb5, 0xbe, 0x68, 0x2f, 0x82, 0x39, 0x74, 0xb1, 0x4c, 0x28, 0xec, 0x61, |
||||
0x17, 0x84, 0x68, 0x99, 0x20, 0xec, 0x71, 0x17, 0x84, 0xf3, 0x20, 0x84, 0xde, 0xc2, 0xd8, 0x7e, |
||||
0x72, 0xe5, 0xbf, 0x00, 0xed, 0xc0, 0x5e, 0xc9, 0xe4, 0xa5, 0xa3, 0x10, 0x7d, 0x9e, 0xe0, 0x04, |
||||
0x9e, 0xd4, 0xd3, 0xf0, 0xcd, 0x64, 0xff, 0xee, 0x48, 0x20, 0x68, 0xd9, 0xff, 0x88, 0x0d, 0x85, |
||||
0x2b, 0x83, 0x0a, 0x90, 0x53, 0xb3, 0x4a, 0xe7, 0xce, 0xda, 0x7f, 0x83, 0xfb, 0x1c, 0x3a, 0xf3, |
||||
0x3d, 0xac, 0xee, 0x02, 0x58, 0x89, 0x75, 0xe3, 0x56, 0xac, 0x7f, 0x79, 0xb0, 0xed, 0x46, 0x5f, |
||||
0x90, 0x82, 0x5e, 0xce, 0xdc, 0x2a, 0xf7, 0x9b, 0x5b, 0xdb, 0xb5, 0xb1, 0xb4, 0xeb, 0x8a, 0xa3, |
||||
0xe6, 0xaa, 0xa3, 0x83, 0x8f, 0xf0, 0x3a, 0xe1, 0x93, 0x50, 0x60, 0xc9, 0x45, 0x46, 0x73, 0x3c, |
||||
0x12, 0xee, 0x03, 0x93, 0xd3, 0x91, 0xf9, 0xe2, 0x8d, 0xca, 0xcb, 0x83, 0xed, 0xa1, 0x06, 0xad, |
||||
0x5b, 0xb7, 0xc2, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8a, 0xce, 0x81, 0xc8, 0x59, 0x05, 0x00, |
||||
0x00, |
||||
} |
@ -0,0 +1,131 @@ |
||||
// This file originates from the SatoshiLabs Trezor `common` repository at: |
||||
// https://github.com/trezor/trezor-common/blob/master/protob/messages-ethereum.proto |
||||
// dated 28.05.2019, commit 893fd219d4a01bcffa0cd9cfa631856371ec5aa9. |
||||
|
||||
syntax = "proto2"; |
||||
package hw.trezor.messages.ethereum; |
||||
|
||||
// Sugar for easier handling in Java |
||||
option java_package = "com.satoshilabs.trezor.lib.protobuf"; |
||||
option java_outer_classname = "TrezorMessageEthereum"; |
||||
|
||||
import "messages-common.proto"; |
||||
|
||||
|
||||
/** |
||||
* Request: Ask device for public key corresponding to address_n path |
||||
* @start |
||||
* @next EthereumPublicKey |
||||
* @next Failure |
||||
*/ |
||||
message EthereumGetPublicKey { |
||||
repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node |
||||
optional bool show_display = 2; // optionally show on display before sending the result |
||||
} |
||||
|
||||
/** |
||||
* Response: Contains public key derived from device private seed |
||||
* @end |
||||
*/ |
||||
message EthereumPublicKey { |
||||
optional hw.trezor.messages.common.HDNodeType node = 1; // BIP32 public node |
||||
optional string xpub = 2; // serialized form of public node |
||||
} |
||||
|
||||
/** |
||||
* Request: Ask device for Ethereum address corresponding to address_n path |
||||
* @start |
||||
* @next EthereumAddress |
||||
* @next Failure |
||||
*/ |
||||
message EthereumGetAddress { |
||||
repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node |
||||
optional bool show_display = 2; // optionally show on display before sending the result |
||||
} |
||||
|
||||
/** |
||||
* Response: Contains an Ethereum address derived from device private seed |
||||
* @end |
||||
*/ |
||||
message EthereumAddress { |
||||
optional bytes addressBin = 1; // Ethereum address as 20 bytes (legacy firmwares) |
||||
optional string addressHex = 2; // Ethereum address as hex string (newer firmwares) |
||||
} |
||||
|
||||
/** |
||||
* Request: Ask device to sign transaction |
||||
* All fields are optional from the protocol's point of view. Each field defaults to value `0` if missing. |
||||
* Note: the first at most 1024 bytes of data MUST be transmitted as part of this message. |
||||
* @start |
||||
* @next EthereumTxRequest |
||||
* @next Failure |
||||
*/ |
||||
message EthereumSignTx { |
||||
repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node |
||||
optional bytes nonce = 2; // <=256 bit unsigned big endian |
||||
optional bytes gas_price = 3; // <=256 bit unsigned big endian (in wei) |
||||
optional bytes gas_limit = 4; // <=256 bit unsigned big endian |
||||
optional bytes toBin = 5; // recipient address (20 bytes, legacy firmware) |
||||
optional string toHex = 11; // recipient address (hex string, newer firmware) |
||||
optional bytes value = 6; // <=256 bit unsigned big endian (in wei) |
||||
optional bytes data_initial_chunk = 7; // The initial data chunk (<= 1024 bytes) |
||||
optional uint32 data_length = 8; // Length of transaction payload |
||||
optional uint32 chain_id = 9; // Chain Id for EIP 155 |
||||
optional uint32 tx_type = 10; // (only for Wanchain) |
||||
} |
||||
|
||||
/** |
||||
* Response: Device asks for more data from transaction payload, or returns the signature. |
||||
* If data_length is set, device awaits that many more bytes of payload. |
||||
* Otherwise, the signature_* fields contain the computed transaction signature. All three fields will be present. |
||||
* @end |
||||
* @next EthereumTxAck |
||||
*/ |
||||
message EthereumTxRequest { |
||||
optional uint32 data_length = 1; // Number of bytes being requested (<= 1024) |
||||
optional uint32 signature_v = 2; // Computed signature (recovery parameter, limited to 27 or 28) |
||||
optional bytes signature_r = 3; // Computed signature R component (256 bit) |
||||
optional bytes signature_s = 4; // Computed signature S component (256 bit) |
||||
} |
||||
|
||||
/** |
||||
* Request: Transaction payload data. |
||||
* @next EthereumTxRequest |
||||
*/ |
||||
message EthereumTxAck { |
||||
optional bytes data_chunk = 1; // Bytes from transaction payload (<= 1024 bytes) |
||||
} |
||||
|
||||
/** |
||||
* Request: Ask device to sign message |
||||
* @start |
||||
* @next EthereumMessageSignature |
||||
* @next Failure |
||||
*/ |
||||
message EthereumSignMessage { |
||||
repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node |
||||
optional bytes message = 2; // message to be signed |
||||
} |
||||
|
||||
/** |
||||
* Response: Signed message |
||||
* @end |
||||
*/ |
||||
message EthereumMessageSignature { |
||||
optional bytes addressBin = 1; // address used to sign the message (20 bytes, legacy firmware) |
||||
optional bytes signature = 2; // signature of the message |
||||
optional string addressHex = 3; // address used to sign the message (hex string, newer firmware) |
||||
} |
||||
|
||||
/** |
||||
* Request: Ask device to verify message |
||||
* @start |
||||
* @next Success |
||||
* @next Failure |
||||
*/ |
||||
message EthereumVerifyMessage { |
||||
optional bytes addressBin = 1; // address to verify (20 bytes, legacy firmware) |
||||
optional bytes signature = 2; // signature to verify |
||||
optional bytes message = 3; // message to verify |
||||
optional string addressHex = 4; // address to verify (hex string, newer firmware) |
||||
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,289 @@ |
||||
// This file originates from the SatoshiLabs Trezor `common` repository at: |
||||
// https://github.com/trezor/trezor-common/blob/master/protob/messages-management.proto |
||||
// dated 28.05.2019, commit 893fd219d4a01bcffa0cd9cfa631856371ec5aa9. |
||||
|
||||
syntax = "proto2"; |
||||
package hw.trezor.messages.management; |
||||
|
||||
// Sugar for easier handling in Java |
||||
option java_package = "com.satoshilabs.trezor.lib.protobuf"; |
||||
option java_outer_classname = "TrezorMessageManagement"; |
||||
|
||||
import "messages-common.proto"; |
||||
|
||||
/** |
||||
* Request: Reset device to default state and ask for device details |
||||
* @start |
||||
* @next Features |
||||
*/ |
||||
message Initialize { |
||||
optional bytes state = 1; // assumed device state, clear session if set and different |
||||
optional bool skip_passphrase = 2; // this session should always assume empty passphrase |
||||
} |
||||
|
||||
/** |
||||
* Request: Ask for device details (no device reset) |
||||
* @start |
||||
* @next Features |
||||
*/ |
||||
message GetFeatures { |
||||
} |
||||
|
||||
/** |
||||
* Response: Reports various information about the device |
||||
* @end |
||||
*/ |
||||
message Features { |
||||
optional string vendor = 1; // name of the manufacturer, e.g. "trezor.io" |
||||
optional uint32 major_version = 2; // major version of the firmware/bootloader, e.g. 1 |
||||
optional uint32 minor_version = 3; // minor version of the firmware/bootloader, e.g. 0 |
||||
optional uint32 patch_version = 4; // patch version of the firmware/bootloader, e.g. 0 |
||||
optional bool bootloader_mode = 5; // is device in bootloader mode? |
||||
optional string device_id = 6; // device's unique identifier |
||||
optional bool pin_protection = 7; // is device protected by PIN? |
||||
optional bool passphrase_protection = 8; // is node/mnemonic encrypted using passphrase? |
||||
optional string language = 9; // device language |
||||
optional string label = 10; // device description label |
||||
optional bool initialized = 12; // does device contain seed? |
||||
optional bytes revision = 13; // SCM revision of firmware |
||||
optional bytes bootloader_hash = 14; // hash of the bootloader |
||||
optional bool imported = 15; // was storage imported from an external source? |
||||
optional bool pin_cached = 16; // is PIN already cached in session? |
||||
optional bool passphrase_cached = 17; // is passphrase already cached in session? |
||||
optional bool firmware_present = 18; // is valid firmware loaded? |
||||
optional bool needs_backup = 19; // does storage need backup? (equals to Storage.needs_backup) |
||||
optional uint32 flags = 20; // device flags (equals to Storage.flags) |
||||
optional string model = 21; // device hardware model |
||||
optional uint32 fw_major = 22; // reported firmware version if in bootloader mode |
||||
optional uint32 fw_minor = 23; // reported firmware version if in bootloader mode |
||||
optional uint32 fw_patch = 24; // reported firmware version if in bootloader mode |
||||
optional string fw_vendor = 25; // reported firmware vendor if in bootloader mode |
||||
optional bytes fw_vendor_keys = 26; // reported firmware vendor keys (their hash) |
||||
optional bool unfinished_backup = 27; // report unfinished backup (equals to Storage.unfinished_backup) |
||||
optional bool no_backup = 28; // report no backup (equals to Storage.no_backup) |
||||
} |
||||
|
||||
/** |
||||
* Request: clear session (removes cached PIN, passphrase, etc). |
||||
* @start |
||||
* @next Success |
||||
*/ |
||||
message ClearSession { |
||||
} |
||||
|
||||
/** |
||||
* Request: change language and/or label of the device |
||||
* @start |
||||
* @next Success |
||||
* @next Failure |
||||
*/ |
||||
message ApplySettings { |
||||
optional string language = 1; |
||||
optional string label = 2; |
||||
optional bool use_passphrase = 3; |
||||
optional bytes homescreen = 4; |
||||
optional PassphraseSourceType passphrase_source = 5; |
||||
optional uint32 auto_lock_delay_ms = 6; |
||||
optional uint32 display_rotation = 7; // in degrees from North |
||||
/** |
||||
* Structure representing passphrase source |
||||
*/ |
||||
enum PassphraseSourceType { |
||||
ASK = 0; |
||||
DEVICE = 1; |
||||
HOST = 2; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Request: set flags of the device |
||||
* @start |
||||
* @next Success |
||||
* @next Failure |
||||
*/ |
||||
message ApplyFlags { |
||||
optional uint32 flags = 1; // bitmask, can only set bits, not unset |
||||
} |
||||
|
||||
/** |
||||
* Request: Starts workflow for setting/changing/removing the PIN |
||||
* @start |
||||
* @next Success |
||||
* @next Failure |
||||
*/ |
||||
message ChangePin { |
||||
optional bool remove = 1; // is PIN removal requested? |
||||
} |
||||
|
||||
/** |
||||
* Request: Test if the device is alive, device sends back the message in Success response |
||||
* @start |
||||
* @next Success |
||||
*/ |
||||
message Ping { |
||||
optional string message = 1; // message to send back in Success message |
||||
optional bool button_protection = 2; // ask for button press |
||||
optional bool pin_protection = 3; // ask for PIN if set in device |
||||
optional bool passphrase_protection = 4; // ask for passphrase if set in device |
||||
} |
||||
|
||||
/** |
||||
* Request: Abort last operation that required user interaction |
||||
* @start |
||||
* @next Failure |
||||
*/ |
||||
message Cancel { |
||||
} |
||||
|
||||
/** |
||||
* Request: Request a sample of random data generated by hardware RNG. May be used for testing. |
||||
* @start |
||||
* @next Entropy |
||||
* @next Failure |
||||
*/ |
||||
message GetEntropy { |
||||
required uint32 size = 1; // size of requested entropy |
||||
} |
||||
|
||||
/** |
||||
* Response: Reply with random data generated by internal RNG |
||||
* @end |
||||
*/ |
||||
message Entropy { |
||||
required bytes entropy = 1; // chunk of random generated bytes |
||||
} |
||||
|
||||
/** |
||||
* Request: Request device to wipe all sensitive data and settings |
||||
* @start |
||||
* @next Success |
||||
* @next Failure |
||||
*/ |
||||
message WipeDevice { |
||||
} |
||||
|
||||
/** |
||||
* Request: Load seed and related internal settings from the computer |
||||
* @start |
||||
* @next Success |
||||
* @next Failure |
||||
*/ |
||||
message LoadDevice { |
||||
optional string mnemonic = 1; // seed encoded as BIP-39 mnemonic (12, 18 or 24 words) |
||||
optional hw.trezor.messages.common.HDNodeType node = 2; // BIP-32 node |
||||
optional string pin = 3; // set PIN protection |
||||
optional bool passphrase_protection = 4; // enable master node encryption using passphrase |
||||
optional string language = 5 [default='english']; // device language |
||||
optional string label = 6; // device label |
||||
optional bool skip_checksum = 7; // do not test mnemonic for valid BIP-39 checksum |
||||
optional uint32 u2f_counter = 8; // U2F counter |
||||
} |
||||
|
||||
/** |
||||
* Request: Ask device to do initialization involving user interaction |
||||
* @start |
||||
* @next EntropyRequest |
||||
* @next Failure |
||||
*/ |
||||
message ResetDevice { |
||||
optional bool display_random = 1; // display entropy generated by the device before asking for additional entropy |
||||
optional uint32 strength = 2 [default=256]; // strength of seed in bits |
||||
optional bool passphrase_protection = 3; // enable master node encryption using passphrase |
||||
optional bool pin_protection = 4; // enable PIN protection |
||||
optional string language = 5 [default='english']; // device language |
||||
optional string label = 6; // device label |
||||
optional uint32 u2f_counter = 7; // U2F counter |
||||
optional bool skip_backup = 8; // postpone seed backup to BackupDevice workflow |
||||
optional bool no_backup = 9; // indicate that no backup is going to be made |
||||
} |
||||
|
||||
/** |
||||
* Request: Perform backup of the device seed if not backed up using ResetDevice |
||||
* @start |
||||
* @next Success |
||||
*/ |
||||
message BackupDevice { |
||||
} |
||||
|
||||
/** |
||||
* Response: Ask for additional entropy from host computer |
||||
* @next EntropyAck |
||||
*/ |
||||
message EntropyRequest { |
||||
} |
||||
|
||||
/** |
||||
* Request: Provide additional entropy for seed generation function |
||||
* @next Success |
||||
*/ |
||||
message EntropyAck { |
||||
optional bytes entropy = 1; // 256 bits (32 bytes) of random data |
||||
} |
||||
|
||||
/** |
||||
* Request: Start recovery workflow asking user for specific words of mnemonic |
||||
* Used to recovery device safely even on untrusted computer. |
||||
* @start |
||||
* @next WordRequest |
||||
*/ |
||||
message RecoveryDevice { |
||||
optional uint32 word_count = 1; // number of words in BIP-39 mnemonic |
||||
optional bool passphrase_protection = 2; // enable master node encryption using passphrase |
||||
optional bool pin_protection = 3; // enable PIN protection |
||||
optional string language = 4 [default='english']; // device language |
||||
optional string label = 5; // device label |
||||
optional bool enforce_wordlist = 6; // enforce BIP-39 wordlist during the process |
||||
// 7 reserved for unused recovery method |
||||
optional RecoveryDeviceType type = 8; // supported recovery type |
||||
optional uint32 u2f_counter = 9; // U2F counter |
||||
optional bool dry_run = 10; // perform dry-run recovery workflow (for safe mnemonic validation) |
||||
/** |
||||
* Type of recovery procedure. These should be used as bitmask, e.g., |
||||
* `RecoveryDeviceType_ScrambledWords | RecoveryDeviceType_Matrix` |
||||
* listing every method supported by the host computer. |
||||
* |
||||
* Note that ScrambledWords must be supported by every implementation |
||||
* for backward compatibility; there is no way to not support it. |
||||
*/ |
||||
enum RecoveryDeviceType { |
||||
// use powers of two when extending this field |
||||
RecoveryDeviceType_ScrambledWords = 0; // words in scrambled order |
||||
RecoveryDeviceType_Matrix = 1; // matrix recovery type |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Response: Device is waiting for user to enter word of the mnemonic |
||||
* Its position is shown only on device's internal display. |
||||
* @next WordAck |
||||
*/ |
||||
message WordRequest { |
||||
optional WordRequestType type = 1; |
||||
/** |
||||
* Type of Recovery Word request |
||||
*/ |
||||
enum WordRequestType { |
||||
WordRequestType_Plain = 0; |
||||
WordRequestType_Matrix9 = 1; |
||||
WordRequestType_Matrix6 = 2; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* Request: Computer replies with word from the mnemonic |
||||
* @next WordRequest |
||||
* @next Success |
||||
* @next Failure |
||||
*/ |
||||
message WordAck { |
||||
required string word = 1; // one word of mnemonic on asked position |
||||
} |
||||
|
||||
/** |
||||
* Request: Set U2F counter |
||||
* @start |
||||
* @next Success |
||||
*/ |
||||
message SetU2FCounter { |
||||
optional uint32 u2f_counter = 1; // counter |
||||
} |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,278 +0,0 @@ |
||||
// This file originates from the SatoshiLabs Trezor `common` repository at: |
||||
// https://github.com/trezor/trezor-common/blob/master/protob/types.proto |
||||
// dated 28.07.2017, commit dd8ec3231fb5f7992360aff9bdfe30bb58130f4b. |
||||
|
||||
syntax = "proto2"; |
||||
|
||||
/** |
||||
* Types for TREZOR communication |
||||
* |
||||
* @author Marek Palatinus <slush@satoshilabs.com> |
||||
* @version 1.2 |
||||
*/ |
||||
|
||||
// Sugar for easier handling in Java |
||||
option java_package = "com.satoshilabs.trezor.lib.protobuf"; |
||||
option java_outer_classname = "TrezorType"; |
||||
|
||||
import "google/protobuf/descriptor.proto"; |
||||
|
||||
/** |
||||
* Options for specifying message direction and type of wire (normal/debug) |
||||
*/ |
||||
extend google.protobuf.EnumValueOptions { |
||||
optional bool wire_in = 50002; // message can be transmitted via wire from PC to TREZOR |
||||
optional bool wire_out = 50003; // message can be transmitted via wire from TREZOR to PC |
||||
optional bool wire_debug_in = 50004; // message can be transmitted via debug wire from PC to TREZOR |
||||
optional bool wire_debug_out = 50005; // message can be transmitted via debug wire from TREZOR to PC |
||||
optional bool wire_tiny = 50006; // message is handled by TREZOR when the USB stack is in tiny mode |
||||
optional bool wire_bootloader = 50007; // message is only handled by TREZOR Bootloader |
||||
} |
||||
|
||||
/** |
||||
* Type of failures returned by Failure message |
||||
* @used_in Failure |
||||
*/ |
||||
enum FailureType { |
||||
Failure_UnexpectedMessage = 1; |
||||
Failure_ButtonExpected = 2; |
||||
Failure_DataError = 3; |
||||
Failure_ActionCancelled = 4; |
||||
Failure_PinExpected = 5; |
||||
Failure_PinCancelled = 6; |
||||
Failure_PinInvalid = 7; |
||||
Failure_InvalidSignature = 8; |
||||
Failure_ProcessError = 9; |
||||
Failure_NotEnoughFunds = 10; |
||||
Failure_NotInitialized = 11; |
||||
Failure_FirmwareError = 99; |
||||
} |
||||
|
||||
/** |
||||
* Type of script which will be used for transaction output |
||||
* @used_in TxOutputType |
||||
*/ |
||||
enum OutputScriptType { |
||||
PAYTOADDRESS = 0; // used for all addresses (bitcoin, p2sh, witness) |
||||
PAYTOSCRIPTHASH = 1; // p2sh address (deprecated; use PAYTOADDRESS) |
||||
PAYTOMULTISIG = 2; // only for change output |
||||
PAYTOOPRETURN = 3; // op_return |
||||
PAYTOWITNESS = 4; // only for change output |
||||
PAYTOP2SHWITNESS = 5; // only for change output |
||||
} |
||||
|
||||
/** |
||||
* Type of script which will be used for transaction output |
||||
* @used_in TxInputType |
||||
*/ |
||||
enum InputScriptType { |
||||
SPENDADDRESS = 0; // standard p2pkh address |
||||
SPENDMULTISIG = 1; // p2sh multisig address |
||||
EXTERNAL = 2; // reserved for external inputs (coinjoin) |
||||
SPENDWITNESS = 3; // native segwit |
||||
SPENDP2SHWITNESS = 4; // segwit over p2sh (backward compatible) |
||||
} |
||||
|
||||
/** |
||||
* Type of information required by transaction signing process |
||||
* @used_in TxRequest |
||||
*/ |
||||
enum RequestType { |
||||
TXINPUT = 0; |
||||
TXOUTPUT = 1; |
||||
TXMETA = 2; |
||||
TXFINISHED = 3; |
||||
TXEXTRADATA = 4; |
||||
} |
||||
|
||||
/** |
||||
* Type of button request |
||||
* @used_in ButtonRequest |
||||
*/ |
||||
enum ButtonRequestType { |
||||
ButtonRequest_Other = 1; |
||||
ButtonRequest_FeeOverThreshold = 2; |
||||
ButtonRequest_ConfirmOutput = 3; |
||||
ButtonRequest_ResetDevice = 4; |
||||
ButtonRequest_ConfirmWord = 5; |
||||
ButtonRequest_WipeDevice = 6; |
||||
ButtonRequest_ProtectCall = 7; |
||||
ButtonRequest_SignTx = 8; |
||||
ButtonRequest_FirmwareCheck = 9; |
||||
ButtonRequest_Address = 10; |
||||
ButtonRequest_PublicKey = 11; |
||||
} |
||||
|
||||
/** |
||||
* Type of PIN request |
||||
* @used_in PinMatrixRequest |
||||
*/ |
||||
enum PinMatrixRequestType { |
||||
PinMatrixRequestType_Current = 1; |
||||
PinMatrixRequestType_NewFirst = 2; |
||||
PinMatrixRequestType_NewSecond = 3; |
||||
} |
||||
|
||||
/** |
||||
* Type of recovery procedure. These should be used as bitmask, e.g., |
||||
* `RecoveryDeviceType_ScrambledWords | RecoveryDeviceType_Matrix` |
||||
* listing every method supported by the host computer. |
||||
* |
||||
* Note that ScrambledWords must be supported by every implementation |
||||
* for backward compatibility; there is no way to not support it. |
||||
* |
||||
* @used_in RecoveryDevice |
||||
*/ |
||||
enum RecoveryDeviceType { |
||||
// use powers of two when extending this field |
||||
RecoveryDeviceType_ScrambledWords = 0; // words in scrambled order |
||||
RecoveryDeviceType_Matrix = 1; // matrix recovery type |
||||
} |
||||
|
||||
/** |
||||
* Type of Recovery Word request |
||||
* @used_in WordRequest |
||||
*/ |
||||
enum WordRequestType { |
||||
WordRequestType_Plain = 0; |
||||
WordRequestType_Matrix9 = 1; |
||||
WordRequestType_Matrix6 = 2; |
||||
} |
||||
|
||||
/** |
||||
* Structure representing BIP32 (hierarchical deterministic) node |
||||
* Used for imports of private key into the device and exporting public key out of device |
||||
* @used_in PublicKey |
||||
* @used_in LoadDevice |
||||
* @used_in DebugLinkState |
||||
* @used_in Storage |
||||
*/ |
||||
message HDNodeType { |
||||
required uint32 depth = 1; |
||||
required uint32 fingerprint = 2; |
||||
required uint32 child_num = 3; |
||||
required bytes chain_code = 4; |
||||
optional bytes private_key = 5; |
||||
optional bytes public_key = 6; |
||||
} |
||||
|
||||
message HDNodePathType { |
||||
required HDNodeType node = 1; // BIP-32 node in deserialized form |
||||
repeated uint32 address_n = 2; // BIP-32 path to derive the key from node |
||||
} |
||||
|
||||
/** |
||||
* Structure representing Coin |
||||
* @used_in Features |
||||
*/ |
||||
message CoinType { |
||||
optional string coin_name = 1; |
||||
optional string coin_shortcut = 2; |
||||
optional uint32 address_type = 3 [default=0]; |
||||
optional uint64 maxfee_kb = 4; |
||||
optional uint32 address_type_p2sh = 5 [default=5]; |
||||
optional string signed_message_header = 8; |
||||
optional uint32 xpub_magic = 9 [default=76067358]; // default=0x0488b21e |
||||
optional uint32 xprv_magic = 10 [default=76066276]; // default=0x0488ade4 |
||||
optional bool segwit = 11; |
||||
optional uint32 forkid = 12; |
||||
} |
||||
|
||||
/** |
||||
* Type of redeem script used in input |
||||
* @used_in TxInputType |
||||
*/ |
||||
message MultisigRedeemScriptType { |
||||
repeated HDNodePathType pubkeys = 1; // pubkeys from multisig address (sorted lexicographically) |
||||
repeated bytes signatures = 2; // existing signatures for partially signed input |
||||
optional uint32 m = 3; // "m" from n, how many valid signatures is necessary for spending |
||||
} |
||||
|
||||
/** |
||||
* Structure representing transaction input |
||||
* @used_in SimpleSignTx |
||||
* @used_in TransactionType |
||||
*/ |
||||
message TxInputType { |
||||
repeated uint32 address_n = 1; // BIP-32 path to derive the key from master node |
||||
required bytes prev_hash = 2; // hash of previous transaction output to spend by this input |
||||
required uint32 prev_index = 3; // index of previous output to spend |
||||
optional bytes script_sig = 4; // script signature, unset for tx to sign |
||||
optional uint32 sequence = 5 [default=4294967295]; // sequence (default=0xffffffff) |
||||
optional InputScriptType script_type = 6 [default=SPENDADDRESS]; // defines template of input script |
||||
optional MultisigRedeemScriptType multisig = 7; // Filled if input is going to spend multisig tx |
||||
optional uint64 amount = 8; // amount of previous transaction output (for segwit only) |
||||
} |
||||
|
||||
/** |
||||
* Structure representing transaction output |
||||
* @used_in SimpleSignTx |
||||
* @used_in TransactionType |
||||
*/ |
||||
message TxOutputType { |
||||
optional string address = 1; // target coin address in Base58 encoding |
||||
repeated uint32 address_n = 2; // BIP-32 path to derive the key from master node; has higher priority than "address" |
||||
required uint64 amount = 3; // amount to spend in satoshis |
||||
required OutputScriptType script_type = 4; // output script type |
||||
optional MultisigRedeemScriptType multisig = 5; // defines multisig address; script_type must be PAYTOMULTISIG |
||||
optional bytes op_return_data = 6; // defines op_return data; script_type must be PAYTOOPRETURN, amount must be 0 |
||||
} |
||||
|
||||
/** |
||||
* Structure representing compiled transaction output |
||||
* @used_in TransactionType |
||||
*/ |
||||
message TxOutputBinType { |
||||
required uint64 amount = 1; |
||||
required bytes script_pubkey = 2; |
||||
} |
||||
|
||||
/** |
||||
* Structure representing transaction |
||||
* @used_in SimpleSignTx |
||||
*/ |
||||
message TransactionType { |
||||
optional uint32 version = 1; |
||||
repeated TxInputType inputs = 2; |
||||
repeated TxOutputBinType bin_outputs = 3; |
||||
repeated TxOutputType outputs = 5; |
||||
optional uint32 lock_time = 4; |
||||
optional uint32 inputs_cnt = 6; |
||||
optional uint32 outputs_cnt = 7; |
||||
optional bytes extra_data = 8; |
||||
optional uint32 extra_data_len = 9; |
||||
} |
||||
|
||||
/** |
||||
* Structure representing request details |
||||
* @used_in TxRequest |
||||
*/ |
||||
message TxRequestDetailsType { |
||||
optional uint32 request_index = 1; // device expects TxAck message from the computer |
||||
optional bytes tx_hash = 2; // tx_hash of requested transaction |
||||
optional uint32 extra_data_len = 3; // length of requested extra data |
||||
optional uint32 extra_data_offset = 4; // offset of requested extra data |
||||
} |
||||
|
||||
/** |
||||
* Structure representing serialized data |
||||
* @used_in TxRequest |
||||
*/ |
||||
message TxRequestSerializedType { |
||||
optional uint32 signature_index = 1; // 'signature' field contains signed input of this index |
||||
optional bytes signature = 2; // signature of the signature_index input |
||||
optional bytes serialized_tx = 3; // part of serialized and signed transaction |
||||
} |
||||
|
||||
/** |
||||
* Structure representing identity data |
||||
* @used_in IdentityType |
||||
*/ |
||||
message IdentityType { |
||||
optional string proto = 1; // proto part of URI |
||||
optional string user = 2; // user part of URI |
||||
optional string host = 3; // host part of URI |
||||
optional string port = 4; // port part of URI |
||||
optional string path = 5; // path part of URI |
||||
optional uint32 index = 6 [default=0]; // identity index |
||||
} |
@ -1,43 +0,0 @@ |
||||
# Go support for Protocol Buffers - Google's data interchange format
|
||||
#
|
||||
# Copyright 2010 The Go Authors. All rights reserved.
|
||||
# https://github.com/golang/protobuf
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following disclaimer
|
||||
# in the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# * Neither the name of Google Inc. nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
install: |
||||
go install
|
||||
|
||||
test: install generate-test-pbs |
||||
go test
|
||||
|
||||
|
||||
generate-test-pbs: |
||||
make install
|
||||
make -C testdata
|
||||
protoc --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata,Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any:. proto3_proto/proto3.proto
|
||||
make
|
@ -0,0 +1,63 @@ |
||||
// Go support for Protocol Buffers - Google's data interchange format
|
||||
//
|
||||
// Copyright 2018 The Go Authors. All rights reserved.
|
||||
// https://github.com/golang/protobuf
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
package proto |
||||
|
||||
import "errors" |
||||
|
||||
// Deprecated: do not use.
|
||||
type Stats struct{ Emalloc, Dmalloc, Encode, Decode, Chit, Cmiss, Size uint64 } |
||||
|
||||
// Deprecated: do not use.
|
||||
func GetStats() Stats { return Stats{} } |
||||
|
||||
// Deprecated: do not use.
|
||||
func MarshalMessageSet(interface{}) ([]byte, error) { |
||||
return nil, errors.New("proto: not implemented") |
||||
} |
||||
|
||||
// Deprecated: do not use.
|
||||
func UnmarshalMessageSet([]byte, interface{}) error { |
||||
return errors.New("proto: not implemented") |
||||
} |
||||
|
||||
// Deprecated: do not use.
|
||||
func MarshalMessageSetJSON(interface{}) ([]byte, error) { |
||||
return nil, errors.New("proto: not implemented") |
||||
} |
||||
|
||||
// Deprecated: do not use.
|
||||
func UnmarshalMessageSetJSON([]byte, interface{}) error { |
||||
return errors.New("proto: not implemented") |
||||
} |
||||
|
||||
// Deprecated: do not use.
|
||||
func RegisterMessageSetType(Message, int32, string) {} |
@ -0,0 +1,350 @@ |
||||
// Go support for Protocol Buffers - Google's data interchange format
|
||||
//
|
||||
// Copyright 2017 The Go Authors. All rights reserved.
|
||||
// https://github.com/golang/protobuf
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
package proto |
||||
|
||||
import ( |
||||
"fmt" |
||||
"reflect" |
||||
"strings" |
||||
"sync" |
||||
"sync/atomic" |
||||
) |
||||
|
||||
type generatedDiscarder interface { |
||||
XXX_DiscardUnknown() |
||||
} |
||||
|
||||
// DiscardUnknown recursively discards all unknown fields from this message
|
||||
// and all embedded messages.
|
||||
//
|
||||
// When unmarshaling a message with unrecognized fields, the tags and values
|
||||
// of such fields are preserved in the Message. This allows a later call to
|
||||
// marshal to be able to produce a message that continues to have those
|
||||
// unrecognized fields. To avoid this, DiscardUnknown is used to
|
||||
// explicitly clear the unknown fields after unmarshaling.
|
||||
//
|
||||
// For proto2 messages, the unknown fields of message extensions are only
|
||||
// discarded from messages that have been accessed via GetExtension.
|
||||
func DiscardUnknown(m Message) { |
||||
if m, ok := m.(generatedDiscarder); ok { |
||||
m.XXX_DiscardUnknown() |
||||
return |
||||
} |
||||
// TODO: Dynamically populate a InternalMessageInfo for legacy messages,
|
||||
// but the master branch has no implementation for InternalMessageInfo,
|
||||
// so it would be more work to replicate that approach.
|
||||
discardLegacy(m) |
||||
} |
||||
|
||||
// DiscardUnknown recursively discards all unknown fields.
|
||||
func (a *InternalMessageInfo) DiscardUnknown(m Message) { |
||||
di := atomicLoadDiscardInfo(&a.discard) |
||||
if di == nil { |
||||
di = getDiscardInfo(reflect.TypeOf(m).Elem()) |
||||
atomicStoreDiscardInfo(&a.discard, di) |
||||
} |
||||
di.discard(toPointer(&m)) |
||||
} |
||||
|
||||
type discardInfo struct { |
||||
typ reflect.Type |
||||
|
||||
initialized int32 // 0: only typ is valid, 1: everything is valid
|
||||
lock sync.Mutex |
||||
|
||||
fields []discardFieldInfo |
||||
unrecognized field |
||||
} |
||||
|
||||
type discardFieldInfo struct { |
||||
field field // Offset of field, guaranteed to be valid
|
||||
discard func(src pointer) |
||||
} |
||||
|
||||
var ( |
||||
discardInfoMap = map[reflect.Type]*discardInfo{} |
||||
discardInfoLock sync.Mutex |
||||
) |
||||
|
||||
func getDiscardInfo(t reflect.Type) *discardInfo { |
||||
discardInfoLock.Lock() |
||||
defer discardInfoLock.Unlock() |
||||
di := discardInfoMap[t] |
||||
if di == nil { |
||||
di = &discardInfo{typ: t} |
||||
discardInfoMap[t] = di |
||||
} |
||||
return di |
||||
} |
||||
|
||||
func (di *discardInfo) discard(src pointer) { |
||||
if src.isNil() { |
||||
return // Nothing to do.
|
||||
} |
||||
|
||||
if atomic.LoadInt32(&di.initialized) == 0 { |
||||
di.computeDiscardInfo() |
||||
} |
||||
|
||||
for _, fi := range di.fields { |
||||
sfp := src.offset(fi.field) |
||||
fi.discard(sfp) |
||||
} |
||||
|
||||
// For proto2 messages, only discard unknown fields in message extensions
|
||||
// that have been accessed via GetExtension.
|
||||
if em, err := extendable(src.asPointerTo(di.typ).Interface()); err == nil { |
||||
// Ignore lock since DiscardUnknown is not concurrency safe.
|
||||
emm, _ := em.extensionsRead() |
||||
for _, mx := range emm { |
||||
if m, ok := mx.value.(Message); ok { |
||||
DiscardUnknown(m) |
||||
} |
||||
} |
||||
} |
||||
|
||||
if di.unrecognized.IsValid() { |
||||
*src.offset(di.unrecognized).toBytes() = nil |
||||
} |
||||
} |
||||
|
||||
func (di *discardInfo) computeDiscardInfo() { |
||||
di.lock.Lock() |
||||
defer di.lock.Unlock() |
||||
if di.initialized != 0 { |
||||
return |
||||
} |
||||
t := di.typ |
||||
n := t.NumField() |
||||
|
||||
for i := 0; i < n; i++ { |
||||
f := t.Field(i) |
||||
if strings.HasPrefix(f.Name, "XXX_") { |
||||
continue |
||||
} |
||||
|
||||
dfi := discardFieldInfo{field: toField(&f)} |
||||
tf := f.Type |
||||
|
||||
// Unwrap tf to get its most basic type.
|
||||
var isPointer, isSlice bool |
||||
if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { |
||||
isSlice = true |
||||
tf = tf.Elem() |
||||
} |
||||
if tf.Kind() == reflect.Ptr { |
||||
isPointer = true |
||||
tf = tf.Elem() |
||||
} |
||||
if isPointer && isSlice && tf.Kind() != reflect.Struct { |
||||
panic(fmt.Sprintf("%v.%s cannot be a slice of pointers to primitive types", t, f.Name)) |
||||
} |
||||
|
||||
switch tf.Kind() { |
||||
case reflect.Struct: |
||||
switch { |
||||
case !isPointer: |
||||
panic(fmt.Sprintf("%v.%s cannot be a direct struct value", t, f.Name)) |
||||
case isSlice: // E.g., []*pb.T
|
||||
di := getDiscardInfo(tf) |
||||
dfi.discard = func(src pointer) { |
||||
sps := src.getPointerSlice() |
||||
for _, sp := range sps { |
||||
if !sp.isNil() { |
||||
di.discard(sp) |
||||
} |
||||
} |
||||
} |
||||
default: // E.g., *pb.T
|
||||
di := getDiscardInfo(tf) |
||||
dfi.discard = func(src pointer) { |
||||
sp := src.getPointer() |
||||
if !sp.isNil() { |
||||
di.discard(sp) |
||||
} |
||||
} |
||||
} |
||||
case reflect.Map: |
||||
switch { |
||||
case isPointer || isSlice: |
||||
panic(fmt.Sprintf("%v.%s cannot be a pointer to a map or a slice of map values", t, f.Name)) |
||||
default: // E.g., map[K]V
|
||||
if tf.Elem().Kind() == reflect.Ptr { // Proto struct (e.g., *T)
|
||||
dfi.discard = func(src pointer) { |
||||
sm := src.asPointerTo(tf).Elem() |
||||
if sm.Len() == 0 { |
||||
return |
||||
} |
||||
for _, key := range sm.MapKeys() { |
||||
val := sm.MapIndex(key) |
||||
DiscardUnknown(val.Interface().(Message)) |
||||
} |
||||
} |
||||
} else { |
||||
dfi.discard = func(pointer) {} // Noop
|
||||
} |
||||
} |
||||
case reflect.Interface: |
||||
// Must be oneof field.
|
||||
switch { |
||||
case isPointer || isSlice: |
||||
panic(fmt.Sprintf("%v.%s cannot be a pointer to a interface or a slice of interface values", t, f.Name)) |
||||
default: // E.g., interface{}
|
||||
// TODO: Make this faster?
|
||||
dfi.discard = func(src pointer) { |
||||
su := src.asPointerTo(tf).Elem() |
||||
if !su.IsNil() { |
||||
sv := su.Elem().Elem().Field(0) |
||||
if sv.Kind() == reflect.Ptr && sv.IsNil() { |
||||
return |
||||
} |
||||
switch sv.Type().Kind() { |
||||
case reflect.Ptr: // Proto struct (e.g., *T)
|
||||
DiscardUnknown(sv.Interface().(Message)) |
||||
} |
||||
} |
||||
} |
||||
} |
||||
default: |
||||
continue |
||||
} |
||||
di.fields = append(di.fields, dfi) |
||||
} |
||||
|
||||
di.unrecognized = invalidField |
||||
if f, ok := t.FieldByName("XXX_unrecognized"); ok { |
||||
if f.Type != reflect.TypeOf([]byte{}) { |
||||
panic("expected XXX_unrecognized to be of type []byte") |
||||
} |
||||
di.unrecognized = toField(&f) |
||||
} |
||||
|
||||
atomic.StoreInt32(&di.initialized, 1) |
||||
} |
||||
|
||||
func discardLegacy(m Message) { |
||||
v := reflect.ValueOf(m) |
||||
if v.Kind() != reflect.Ptr || v.IsNil() { |
||||
return |
||||
} |
||||
v = v.Elem() |
||||
if v.Kind() != reflect.Struct { |
||||
return |
||||
} |
||||
t := v.Type() |
||||
|
||||
for i := 0; i < v.NumField(); i++ { |
||||
f := t.Field(i) |
||||
if strings.HasPrefix(f.Name, "XXX_") { |
||||
continue |
||||
} |
||||
vf := v.Field(i) |
||||
tf := f.Type |
||||
|
||||
// Unwrap tf to get its most basic type.
|
||||
var isPointer, isSlice bool |
||||
if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { |
||||
isSlice = true |
||||
tf = tf.Elem() |
||||
} |
||||
if tf.Kind() == reflect.Ptr { |
||||
isPointer = true |
||||
tf = tf.Elem() |
||||
} |
||||
if isPointer && isSlice && tf.Kind() != reflect.Struct { |
||||
panic(fmt.Sprintf("%T.%s cannot be a slice of pointers to primitive types", m, f.Name)) |
||||
} |
||||
|
||||
switch tf.Kind() { |
||||
case reflect.Struct: |
||||
switch { |
||||
case !isPointer: |
||||
panic(fmt.Sprintf("%T.%s cannot be a direct struct value", m, f.Name)) |
||||
case isSlice: // E.g., []*pb.T
|
||||
for j := 0; j < vf.Len(); j++ { |
||||
discardLegacy(vf.Index(j).Interface().(Message)) |
||||
} |
||||
default: // E.g., *pb.T
|
||||
discardLegacy(vf.Interface().(Message)) |
||||
} |
||||
case reflect.Map: |
||||
switch { |
||||
case isPointer || isSlice: |
||||
panic(fmt.Sprintf("%T.%s cannot be a pointer to a map or a slice of map values", m, f.Name)) |
||||
default: // E.g., map[K]V
|
||||
tv := vf.Type().Elem() |
||||
if tv.Kind() == reflect.Ptr && tv.Implements(protoMessageType) { // Proto struct (e.g., *T)
|
||||
for _, key := range vf.MapKeys() { |
||||
val := vf.MapIndex(key) |
||||
discardLegacy(val.Interface().(Message)) |
||||
} |
||||
} |
||||
} |
||||
case reflect.Interface: |
||||
// Must be oneof field.
|
||||
switch { |
||||
case isPointer || isSlice: |
||||
panic(fmt.Sprintf("%T.%s cannot be a pointer to a interface or a slice of interface values", m, f.Name)) |
||||
default: // E.g., test_proto.isCommunique_Union interface
|
||||
if !vf.IsNil() && f.Tag.Get("protobuf_oneof") != "" { |
||||
vf = vf.Elem() // E.g., *test_proto.Communique_Msg
|
||||
if !vf.IsNil() { |
||||
vf = vf.Elem() // E.g., test_proto.Communique_Msg
|
||||
vf = vf.Field(0) // E.g., Proto struct (e.g., *T) or primitive value
|
||||
if vf.Kind() == reflect.Ptr { |
||||
discardLegacy(vf.Interface().(Message)) |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
if vf := v.FieldByName("XXX_unrecognized"); vf.IsValid() { |
||||
if vf.Type() != reflect.TypeOf([]byte{}) { |
||||
panic("expected XXX_unrecognized to be of type []byte") |
||||
} |
||||
vf.Set(reflect.ValueOf([]byte(nil))) |
||||
} |
||||
|
||||
// For proto2 messages, only discard unknown fields in message extensions
|
||||
// that have been accessed via GetExtension.
|
||||
if em, err := extendable(m); err == nil { |
||||
// Ignore lock since discardLegacy is not concurrency safe.
|
||||
emm, _ := em.extensionsRead() |
||||
for _, mx := range emm { |
||||
if m, ok := mx.value.(Message); ok { |
||||
discardLegacy(m) |
||||
} |
||||
} |
||||
} |
||||
} |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,654 @@ |
||||
// Go support for Protocol Buffers - Google's data interchange format
|
||||
//
|
||||
// Copyright 2016 The Go Authors. All rights reserved.
|
||||
// https://github.com/golang/protobuf
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
package proto |
||||
|
||||
import ( |
||||
"fmt" |
||||
"reflect" |
||||
"strings" |
||||
"sync" |
||||
"sync/atomic" |
||||
) |
||||
|
||||
// Merge merges the src message into dst.
|
||||
// This assumes that dst and src of the same type and are non-nil.
|
||||
func (a *InternalMessageInfo) Merge(dst, src Message) { |
||||
mi := atomicLoadMergeInfo(&a.merge) |
||||
if mi == nil { |
||||
mi = getMergeInfo(reflect.TypeOf(dst).Elem()) |
||||
atomicStoreMergeInfo(&a.merge, mi) |
||||
} |
||||
mi.merge(toPointer(&dst), toPointer(&src)) |
||||
} |
||||
|
||||
type mergeInfo struct { |
||||
typ reflect.Type |
||||
|
||||
initialized int32 // 0: only typ is valid, 1: everything is valid
|
||||
lock sync.Mutex |
||||
|
||||
fields []mergeFieldInfo |
||||
unrecognized field // Offset of XXX_unrecognized
|
||||
} |
||||
|
||||
type mergeFieldInfo struct { |
||||
field field // Offset of field, guaranteed to be valid
|
||||
|
||||
// isPointer reports whether the value in the field is a pointer.
|
||||
// This is true for the following situations:
|
||||
// * Pointer to struct
|
||||
// * Pointer to basic type (proto2 only)
|
||||
// * Slice (first value in slice header is a pointer)
|
||||
// * String (first value in string header is a pointer)
|
||||
isPointer bool |
||||
|
||||
// basicWidth reports the width of the field assuming that it is directly
|
||||
// embedded in the struct (as is the case for basic types in proto3).
|
||||
// The possible values are:
|
||||
// 0: invalid
|
||||
// 1: bool
|
||||
// 4: int32, uint32, float32
|
||||
// 8: int64, uint64, float64
|
||||
basicWidth int |
||||
|
||||
// Where dst and src are pointers to the types being merged.
|
||||
merge func(dst, src pointer) |
||||
} |
||||
|
||||
var ( |
||||
mergeInfoMap = map[reflect.Type]*mergeInfo{} |
||||
mergeInfoLock sync.Mutex |
||||
) |
||||
|
||||
func getMergeInfo(t reflect.Type) *mergeInfo { |
||||
mergeInfoLock.Lock() |
||||
defer mergeInfoLock.Unlock() |
||||
mi := mergeInfoMap[t] |
||||
if mi == nil { |
||||
mi = &mergeInfo{typ: t} |
||||
mergeInfoMap[t] = mi |
||||
} |
||||
return mi |
||||
} |
||||
|
||||
// merge merges src into dst assuming they are both of type *mi.typ.
|
||||
func (mi *mergeInfo) merge(dst, src pointer) { |
||||
if dst.isNil() { |
||||
panic("proto: nil destination") |
||||
} |
||||
if src.isNil() { |
||||
return // Nothing to do.
|
||||
} |
||||
|
||||
if atomic.LoadInt32(&mi.initialized) == 0 { |
||||
mi.computeMergeInfo() |
||||
} |
||||
|
||||
for _, fi := range mi.fields { |
||||
sfp := src.offset(fi.field) |
||||
|
||||
// As an optimization, we can avoid the merge function call cost
|
||||
// if we know for sure that the source will have no effect
|
||||
// by checking if it is the zero value.
|
||||
if unsafeAllowed { |
||||
if fi.isPointer && sfp.getPointer().isNil() { // Could be slice or string
|
||||
continue |
||||
} |
||||
if fi.basicWidth > 0 { |
||||
switch { |
||||
case fi.basicWidth == 1 && !*sfp.toBool(): |
||||
continue |
||||
case fi.basicWidth == 4 && *sfp.toUint32() == 0: |
||||
continue |
||||
case fi.basicWidth == 8 && *sfp.toUint64() == 0: |
||||
continue |
||||
} |
||||
} |
||||
} |
||||
|
||||
dfp := dst.offset(fi.field) |
||||
fi.merge(dfp, sfp) |
||||
} |
||||
|
||||
// TODO: Make this faster?
|
||||
out := dst.asPointerTo(mi.typ).Elem() |
||||
in := src.asPointerTo(mi.typ).Elem() |
||||
if emIn, err := extendable(in.Addr().Interface()); err == nil { |
||||
emOut, _ := extendable(out.Addr().Interface()) |
||||
mIn, muIn := emIn.extensionsRead() |
||||
if mIn != nil { |
||||
mOut := emOut.extensionsWrite() |
||||
muIn.Lock() |
||||
mergeExtension(mOut, mIn) |
||||
muIn.Unlock() |
||||
} |
||||
} |
||||
|
||||
if mi.unrecognized.IsValid() { |
||||
if b := *src.offset(mi.unrecognized).toBytes(); len(b) > 0 { |
||||
*dst.offset(mi.unrecognized).toBytes() = append([]byte(nil), b...) |
||||
} |
||||
} |
||||
} |
||||
|
||||
func (mi *mergeInfo) computeMergeInfo() { |
||||
mi.lock.Lock() |
||||
defer mi.lock.Unlock() |
||||
if mi.initialized != 0 { |
||||
return |
||||
} |
||||
t := mi.typ |
||||
n := t.NumField() |
||||
|
||||
props := GetProperties(t) |
||||
for i := 0; i < n; i++ { |
||||
f := t.Field(i) |
||||
if strings.HasPrefix(f.Name, "XXX_") { |
||||
continue |
||||
} |
||||
|
||||
mfi := mergeFieldInfo{field: toField(&f)} |
||||
tf := f.Type |
||||
|
||||
// As an optimization, we can avoid the merge function call cost
|
||||
// if we know for sure that the source will have no effect
|
||||
// by checking if it is the zero value.
|
||||
if unsafeAllowed { |
||||
switch tf.Kind() { |
||||
case reflect.Ptr, reflect.Slice, reflect.String: |
||||
// As a special case, we assume slices and strings are pointers
|
||||
// since we know that the first field in the SliceSlice or
|
||||
// StringHeader is a data pointer.
|
||||
mfi.isPointer = true |
||||
case reflect.Bool: |
||||
mfi.basicWidth = 1 |
||||
case reflect.Int32, reflect.Uint32, reflect.Float32: |
||||
mfi.basicWidth = 4 |
||||
case reflect.Int64, reflect.Uint64, reflect.Float64: |
||||
mfi.basicWidth = 8 |
||||
} |
||||
} |
||||
|
||||
// Unwrap tf to get at its most basic type.
|
||||
var isPointer, isSlice bool |
||||
if tf.Kind() == reflect.Slice && tf.Elem().Kind() != reflect.Uint8 { |
||||
isSlice = true |
||||
tf = tf.Elem() |
||||
} |
||||
if tf.Kind() == reflect.Ptr { |
||||
isPointer = true |
||||
tf = tf.Elem() |
||||
} |
||||
if isPointer && isSlice && tf.Kind() != reflect.Struct { |
||||
panic("both pointer and slice for basic type in " + tf.Name()) |
||||
} |
||||
|
||||
switch tf.Kind() { |
||||
case reflect.Int32: |
||||
switch { |
||||
case isSlice: // E.g., []int32
|
||||
mfi.merge = func(dst, src pointer) { |
||||
// NOTE: toInt32Slice is not defined (see pointer_reflect.go).
|
||||
/* |
||||
sfsp := src.toInt32Slice() |
||||
if *sfsp != nil { |
||||
dfsp := dst.toInt32Slice() |
||||
*dfsp = append(*dfsp, *sfsp...) |
||||
if *dfsp == nil { |
||||
*dfsp = []int64{} |
||||
} |
||||
} |
||||
*/ |
||||
sfs := src.getInt32Slice() |
||||
if sfs != nil { |
||||
dfs := dst.getInt32Slice() |
||||
dfs = append(dfs, sfs...) |
||||
if dfs == nil { |
||||
dfs = []int32{} |
||||
} |
||||
dst.setInt32Slice(dfs) |
||||
} |
||||
} |
||||
case isPointer: // E.g., *int32
|
||||
mfi.merge = func(dst, src pointer) { |
||||
// NOTE: toInt32Ptr is not defined (see pointer_reflect.go).
|
||||
/* |
||||
sfpp := src.toInt32Ptr() |
||||
if *sfpp != nil { |
||||
dfpp := dst.toInt32Ptr() |
||||
if *dfpp == nil { |
||||
*dfpp = Int32(**sfpp) |
||||
} else { |
||||
**dfpp = **sfpp |
||||
} |
||||
} |
||||
*/ |
||||
sfp := src.getInt32Ptr() |
||||
if sfp != nil { |
||||
dfp := dst.getInt32Ptr() |
||||
if dfp == nil { |
||||
dst.setInt32Ptr(*sfp) |
||||
} else { |
||||
*dfp = *sfp |
||||
} |
||||
} |
||||
} |
||||
default: // E.g., int32
|
||||
mfi.merge = func(dst, src pointer) { |
||||
if v := *src.toInt32(); v != 0 { |
||||
*dst.toInt32() = v |
||||
} |
||||
} |
||||
} |
||||
case reflect.Int64: |
||||
switch { |
||||
case isSlice: // E.g., []int64
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfsp := src.toInt64Slice() |
||||
if *sfsp != nil { |
||||
dfsp := dst.toInt64Slice() |
||||
*dfsp = append(*dfsp, *sfsp...) |
||||
if *dfsp == nil { |
||||
*dfsp = []int64{} |
||||
} |
||||
} |
||||
} |
||||
case isPointer: // E.g., *int64
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfpp := src.toInt64Ptr() |
||||
if *sfpp != nil { |
||||
dfpp := dst.toInt64Ptr() |
||||
if *dfpp == nil { |
||||
*dfpp = Int64(**sfpp) |
||||
} else { |
||||
**dfpp = **sfpp |
||||
} |
||||
} |
||||
} |
||||
default: // E.g., int64
|
||||
mfi.merge = func(dst, src pointer) { |
||||
if v := *src.toInt64(); v != 0 { |
||||
*dst.toInt64() = v |
||||
} |
||||
} |
||||
} |
||||
case reflect.Uint32: |
||||
switch { |
||||
case isSlice: // E.g., []uint32
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfsp := src.toUint32Slice() |
||||
if *sfsp != nil { |
||||
dfsp := dst.toUint32Slice() |
||||
*dfsp = append(*dfsp, *sfsp...) |
||||
if *dfsp == nil { |
||||
*dfsp = []uint32{} |
||||
} |
||||
} |
||||
} |
||||
case isPointer: // E.g., *uint32
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfpp := src.toUint32Ptr() |
||||
if *sfpp != nil { |
||||
dfpp := dst.toUint32Ptr() |
||||
if *dfpp == nil { |
||||
*dfpp = Uint32(**sfpp) |
||||
} else { |
||||
**dfpp = **sfpp |
||||
} |
||||
} |
||||
} |
||||
default: // E.g., uint32
|
||||
mfi.merge = func(dst, src pointer) { |
||||
if v := *src.toUint32(); v != 0 { |
||||
*dst.toUint32() = v |
||||
} |
||||
} |
||||
} |
||||
case reflect.Uint64: |
||||
switch { |
||||
case isSlice: // E.g., []uint64
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfsp := src.toUint64Slice() |
||||
if *sfsp != nil { |
||||
dfsp := dst.toUint64Slice() |
||||
*dfsp = append(*dfsp, *sfsp...) |
||||
if *dfsp == nil { |
||||
*dfsp = []uint64{} |
||||
} |
||||
} |
||||
} |
||||
case isPointer: // E.g., *uint64
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfpp := src.toUint64Ptr() |
||||
if *sfpp != nil { |
||||
dfpp := dst.toUint64Ptr() |
||||
if *dfpp == nil { |
||||
*dfpp = Uint64(**sfpp) |
||||
} else { |
||||
**dfpp = **sfpp |
||||
} |
||||
} |
||||
} |
||||
default: // E.g., uint64
|
||||
mfi.merge = func(dst, src pointer) { |
||||
if v := *src.toUint64(); v != 0 { |
||||
*dst.toUint64() = v |
||||
} |
||||
} |
||||
} |
||||
case reflect.Float32: |
||||
switch { |
||||
case isSlice: // E.g., []float32
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfsp := src.toFloat32Slice() |
||||
if *sfsp != nil { |
||||
dfsp := dst.toFloat32Slice() |
||||
*dfsp = append(*dfsp, *sfsp...) |
||||
if *dfsp == nil { |
||||
*dfsp = []float32{} |
||||
} |
||||
} |
||||
} |
||||
case isPointer: // E.g., *float32
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfpp := src.toFloat32Ptr() |
||||
if *sfpp != nil { |
||||
dfpp := dst.toFloat32Ptr() |
||||
if *dfpp == nil { |
||||
*dfpp = Float32(**sfpp) |
||||
} else { |
||||
**dfpp = **sfpp |
||||
} |
||||
} |
||||
} |
||||
default: // E.g., float32
|
||||
mfi.merge = func(dst, src pointer) { |
||||
if v := *src.toFloat32(); v != 0 { |
||||
*dst.toFloat32() = v |
||||
} |
||||
} |
||||
} |
||||
case reflect.Float64: |
||||
switch { |
||||
case isSlice: // E.g., []float64
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfsp := src.toFloat64Slice() |
||||
if *sfsp != nil { |
||||
dfsp := dst.toFloat64Slice() |
||||
*dfsp = append(*dfsp, *sfsp...) |
||||
if *dfsp == nil { |
||||
*dfsp = []float64{} |
||||
} |
||||
} |
||||
} |
||||
case isPointer: // E.g., *float64
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfpp := src.toFloat64Ptr() |
||||
if *sfpp != nil { |
||||
dfpp := dst.toFloat64Ptr() |
||||
if *dfpp == nil { |
||||
*dfpp = Float64(**sfpp) |
||||
} else { |
||||
**dfpp = **sfpp |
||||
} |
||||
} |
||||
} |
||||
default: // E.g., float64
|
||||
mfi.merge = func(dst, src pointer) { |
||||
if v := *src.toFloat64(); v != 0 { |
||||
*dst.toFloat64() = v |
||||
} |
||||
} |
||||
} |
||||
case reflect.Bool: |
||||
switch { |
||||
case isSlice: // E.g., []bool
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfsp := src.toBoolSlice() |
||||
if *sfsp != nil { |
||||
dfsp := dst.toBoolSlice() |
||||
*dfsp = append(*dfsp, *sfsp...) |
||||
if *dfsp == nil { |
||||
*dfsp = []bool{} |
||||
} |
||||
} |
||||
} |
||||
case isPointer: // E.g., *bool
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfpp := src.toBoolPtr() |
||||
if *sfpp != nil { |
||||
dfpp := dst.toBoolPtr() |
||||
if *dfpp == nil { |
||||
*dfpp = Bool(**sfpp) |
||||
} else { |
||||
**dfpp = **sfpp |
||||
} |
||||
} |
||||
} |
||||
default: // E.g., bool
|
||||
mfi.merge = func(dst, src pointer) { |
||||
if v := *src.toBool(); v { |
||||
*dst.toBool() = v |
||||
} |
||||
} |
||||
} |
||||
case reflect.String: |
||||
switch { |
||||
case isSlice: // E.g., []string
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfsp := src.toStringSlice() |
||||
if *sfsp != nil { |
||||
dfsp := dst.toStringSlice() |
||||
*dfsp = append(*dfsp, *sfsp...) |
||||
if *dfsp == nil { |
||||
*dfsp = []string{} |
||||
} |
||||
} |
||||
} |
||||
case isPointer: // E.g., *string
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sfpp := src.toStringPtr() |
||||
if *sfpp != nil { |
||||
dfpp := dst.toStringPtr() |
||||
if *dfpp == nil { |
||||
*dfpp = String(**sfpp) |
||||
} else { |
||||
**dfpp = **sfpp |
||||
} |
||||
} |
||||
} |
||||
default: // E.g., string
|
||||
mfi.merge = func(dst, src pointer) { |
||||
if v := *src.toString(); v != "" { |
||||
*dst.toString() = v |
||||
} |
||||
} |
||||
} |
||||
case reflect.Slice: |
||||
isProto3 := props.Prop[i].proto3 |
||||
switch { |
||||
case isPointer: |
||||
panic("bad pointer in byte slice case in " + tf.Name()) |
||||
case tf.Elem().Kind() != reflect.Uint8: |
||||
panic("bad element kind in byte slice case in " + tf.Name()) |
||||
case isSlice: // E.g., [][]byte
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sbsp := src.toBytesSlice() |
||||
if *sbsp != nil { |
||||
dbsp := dst.toBytesSlice() |
||||
for _, sb := range *sbsp { |
||||
if sb == nil { |
||||
*dbsp = append(*dbsp, nil) |
||||
} else { |
||||
*dbsp = append(*dbsp, append([]byte{}, sb...)) |
||||
} |
||||
} |
||||
if *dbsp == nil { |
||||
*dbsp = [][]byte{} |
||||
} |
||||
} |
||||
} |
||||
default: // E.g., []byte
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sbp := src.toBytes() |
||||
if *sbp != nil { |
||||
dbp := dst.toBytes() |
||||
if !isProto3 || len(*sbp) > 0 { |
||||
*dbp = append([]byte{}, *sbp...) |
||||
} |
||||
} |
||||
} |
||||
} |
||||
case reflect.Struct: |
||||
switch { |
||||
case !isPointer: |
||||
panic(fmt.Sprintf("message field %s without pointer", tf)) |
||||
case isSlice: // E.g., []*pb.T
|
||||
mi := getMergeInfo(tf) |
||||
mfi.merge = func(dst, src pointer) { |
||||
sps := src.getPointerSlice() |
||||
if sps != nil { |
||||
dps := dst.getPointerSlice() |
||||
for _, sp := range sps { |
||||
var dp pointer |
||||
if !sp.isNil() { |
||||
dp = valToPointer(reflect.New(tf)) |
||||
mi.merge(dp, sp) |
||||
} |
||||
dps = append(dps, dp) |
||||
} |
||||
if dps == nil { |
||||
dps = []pointer{} |
||||
} |
||||
dst.setPointerSlice(dps) |
||||
} |
||||
} |
||||
default: // E.g., *pb.T
|
||||
mi := getMergeInfo(tf) |
||||
mfi.merge = func(dst, src pointer) { |
||||
sp := src.getPointer() |
||||
if !sp.isNil() { |
||||
dp := dst.getPointer() |
||||
if dp.isNil() { |
||||
dp = valToPointer(reflect.New(tf)) |
||||
dst.setPointer(dp) |
||||
} |
||||
mi.merge(dp, sp) |
||||
} |
||||
} |
||||
} |
||||
case reflect.Map: |
||||
switch { |
||||
case isPointer || isSlice: |
||||
panic("bad pointer or slice in map case in " + tf.Name()) |
||||
default: // E.g., map[K]V
|
||||
mfi.merge = func(dst, src pointer) { |
||||
sm := src.asPointerTo(tf).Elem() |
||||
if sm.Len() == 0 { |
||||
return |
||||
} |
||||
dm := dst.asPointerTo(tf).Elem() |
||||
if dm.IsNil() { |
||||
dm.Set(reflect.MakeMap(tf)) |
||||
} |
||||
|
||||
switch tf.Elem().Kind() { |
||||
case reflect.Ptr: // Proto struct (e.g., *T)
|
||||
for _, key := range sm.MapKeys() { |
||||
val := sm.MapIndex(key) |
||||
val = reflect.ValueOf(Clone(val.Interface().(Message))) |
||||
dm.SetMapIndex(key, val) |
||||
} |
||||
case reflect.Slice: // E.g. Bytes type (e.g., []byte)
|
||||
for _, key := range sm.MapKeys() { |
||||
val := sm.MapIndex(key) |
||||
val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) |
||||
dm.SetMapIndex(key, val) |
||||
} |
||||
default: // Basic type (e.g., string)
|
||||
for _, key := range sm.MapKeys() { |
||||
val := sm.MapIndex(key) |
||||
dm.SetMapIndex(key, val) |
||||
} |
||||
} |
||||
} |
||||
} |
||||
case reflect.Interface: |
||||
// Must be oneof field.
|
||||
switch { |
||||
case isPointer || isSlice: |
||||
panic("bad pointer or slice in interface case in " + tf.Name()) |
||||
default: // E.g., interface{}
|
||||
// TODO: Make this faster?
|
||||
mfi.merge = func(dst, src pointer) { |
||||
su := src.asPointerTo(tf).Elem() |
||||
if !su.IsNil() { |
||||
du := dst.asPointerTo(tf).Elem() |
||||
typ := su.Elem().Type() |
||||
if du.IsNil() || du.Elem().Type() != typ { |
||||
du.Set(reflect.New(typ.Elem())) // Initialize interface if empty
|
||||
} |
||||
sv := su.Elem().Elem().Field(0) |
||||
if sv.Kind() == reflect.Ptr && sv.IsNil() { |
||||
return |
||||
} |
||||
dv := du.Elem().Elem().Field(0) |
||||
if dv.Kind() == reflect.Ptr && dv.IsNil() { |
||||
dv.Set(reflect.New(sv.Type().Elem())) // Initialize proto message if empty
|
||||
} |
||||
switch sv.Type().Kind() { |
||||
case reflect.Ptr: // Proto struct (e.g., *T)
|
||||
Merge(dv.Interface().(Message), sv.Interface().(Message)) |
||||
case reflect.Slice: // E.g. Bytes type (e.g., []byte)
|
||||
dv.Set(reflect.ValueOf(append([]byte{}, sv.Bytes()...))) |
||||
default: // Basic type (e.g., string)
|
||||
dv.Set(sv) |
||||
} |
||||
} |
||||
} |
||||
} |
||||
default: |
||||
panic(fmt.Sprintf("merger not found for type:%s", tf)) |
||||
} |
||||
mi.fields = append(mi.fields, mfi) |
||||
} |
||||
|
||||
mi.unrecognized = invalidField |
||||
if f, ok := t.FieldByName("XXX_unrecognized"); ok { |
||||
if f.Type != reflect.TypeOf([]byte{}) { |
||||
panic("expected XXX_unrecognized to be of type []byte") |
||||
} |
||||
mi.unrecognized = toField(&f) |
||||
} |
||||
|
||||
atomic.StoreInt32(&mi.initialized, 1) |
||||
} |
File diff suppressed because it is too large
Load Diff
@ -1,36 +0,0 @@ |
||||
# Go support for Protocol Buffers - Google's data interchange format
|
||||
#
|
||||
# Copyright 2010 The Go Authors. All rights reserved.
|
||||
# https://github.com/golang/protobuf
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following disclaimer
|
||||
# in the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# * Neither the name of Google Inc. nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
# Not stored here, but descriptor.proto is in https://github.com/google/protobuf/
|
||||
# at src/google/protobuf/descriptor.proto
|
||||
regenerate: |
||||
@echo WARNING! THIS RULE IS PROBABLY NOT RIGHT FOR YOUR INSTALLATION
|
||||
protoc --go_out=../../../../.. -I$(HOME)/src/protobuf/include $(HOME)/src/protobuf/include/google/protobuf/descriptor.proto
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,883 @@ |
||||
// Protocol Buffers - Google's data interchange format |
||||
// Copyright 2008 Google Inc. All rights reserved. |
||||
// https://developers.google.com/protocol-buffers/ |
||||
// |
||||
// Redistribution and use in source and binary forms, with or without |
||||
// modification, are permitted provided that the following conditions are |
||||
// met: |
||||
// |
||||
// * Redistributions of source code must retain the above copyright |
||||
// notice, this list of conditions and the following disclaimer. |
||||
// * Redistributions in binary form must reproduce the above |
||||
// copyright notice, this list of conditions and the following disclaimer |
||||
// in the documentation and/or other materials provided with the |
||||
// distribution. |
||||
// * Neither the name of Google Inc. nor the names of its |
||||
// contributors may be used to endorse or promote products derived from |
||||
// this software without specific prior written permission. |
||||
// |
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
// Author: kenton@google.com (Kenton Varda) |
||||
// Based on original Protocol Buffers design by |
||||
// Sanjay Ghemawat, Jeff Dean, and others. |
||||
// |
||||
// The messages in this file describe the definitions found in .proto files. |
||||
// A valid .proto file can be translated directly to a FileDescriptorProto |
||||
// without any other information (e.g. without reading its imports). |
||||
|
||||
|
||||
syntax = "proto2"; |
||||
|
||||
package google.protobuf; |
||||
option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor"; |
||||
option java_package = "com.google.protobuf"; |
||||
option java_outer_classname = "DescriptorProtos"; |
||||
option csharp_namespace = "Google.Protobuf.Reflection"; |
||||
option objc_class_prefix = "GPB"; |
||||
option cc_enable_arenas = true; |
||||
|
||||
// descriptor.proto must be optimized for speed because reflection-based |
||||
// algorithms don't work during bootstrapping. |
||||
option optimize_for = SPEED; |
||||
|
||||
// The protocol compiler can output a FileDescriptorSet containing the .proto |
||||
// files it parses. |
||||
message FileDescriptorSet { |
||||
repeated FileDescriptorProto file = 1; |
||||
} |
||||
|
||||
// Describes a complete .proto file. |
||||
message FileDescriptorProto { |
||||
optional string name = 1; // file name, relative to root of source tree |
||||
optional string package = 2; // e.g. "foo", "foo.bar", etc. |
||||
|
||||
// Names of files imported by this file. |
||||
repeated string dependency = 3; |
||||
// Indexes of the public imported files in the dependency list above. |
||||
repeated int32 public_dependency = 10; |
||||
// Indexes of the weak imported files in the dependency list. |
||||
// For Google-internal migration only. Do not use. |
||||
repeated int32 weak_dependency = 11; |
||||
|
||||
// All top-level definitions in this file. |
||||
repeated DescriptorProto message_type = 4; |
||||
repeated EnumDescriptorProto enum_type = 5; |
||||
repeated ServiceDescriptorProto service = 6; |
||||
repeated FieldDescriptorProto extension = 7; |
||||
|
||||
optional FileOptions options = 8; |
||||
|
||||
// This field contains optional information about the original source code. |
||||
// You may safely remove this entire field without harming runtime |
||||
// functionality of the descriptors -- the information is needed only by |
||||
// development tools. |
||||
optional SourceCodeInfo source_code_info = 9; |
||||
|
||||
// The syntax of the proto file. |
||||
// The supported values are "proto2" and "proto3". |
||||
optional string syntax = 12; |
||||
} |
||||
|
||||
// Describes a message type. |
||||
message DescriptorProto { |
||||
optional string name = 1; |
||||
|
||||
repeated FieldDescriptorProto field = 2; |
||||
repeated FieldDescriptorProto extension = 6; |
||||
|
||||
repeated DescriptorProto nested_type = 3; |
||||
repeated EnumDescriptorProto enum_type = 4; |
||||
|
||||
message ExtensionRange { |
||||
optional int32 start = 1; |
||||
optional int32 end = 2; |
||||
|
||||
optional ExtensionRangeOptions options = 3; |
||||
} |
||||
repeated ExtensionRange extension_range = 5; |
||||
|
||||
repeated OneofDescriptorProto oneof_decl = 8; |
||||
|
||||
optional MessageOptions options = 7; |
||||
|
||||
// Range of reserved tag numbers. Reserved tag numbers may not be used by |
||||
// fields or extension ranges in the same message. Reserved ranges may |
||||
// not overlap. |
||||
message ReservedRange { |
||||
optional int32 start = 1; // Inclusive. |
||||
optional int32 end = 2; // Exclusive. |
||||
} |
||||
repeated ReservedRange reserved_range = 9; |
||||
// Reserved field names, which may not be used by fields in the same message. |
||||
// A given name may only be reserved once. |
||||
repeated string reserved_name = 10; |
||||
} |
||||
|
||||
message ExtensionRangeOptions { |
||||
// The parser stores options it doesn't recognize here. See above. |
||||
repeated UninterpretedOption uninterpreted_option = 999; |
||||
|
||||
// Clients can define custom options in extensions of this message. See above. |
||||
extensions 1000 to max; |
||||
} |
||||
|
||||
// Describes a field within a message. |
||||
message FieldDescriptorProto { |
||||
enum Type { |
||||
// 0 is reserved for errors. |
||||
// Order is weird for historical reasons. |
||||
TYPE_DOUBLE = 1; |
||||
TYPE_FLOAT = 2; |
||||
// Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if |
||||
// negative values are likely. |
||||
TYPE_INT64 = 3; |
||||
TYPE_UINT64 = 4; |
||||
// Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if |
||||
// negative values are likely. |
||||
TYPE_INT32 = 5; |
||||
TYPE_FIXED64 = 6; |
||||
TYPE_FIXED32 = 7; |
||||
TYPE_BOOL = 8; |
||||
TYPE_STRING = 9; |
||||
// Tag-delimited aggregate. |
||||
// Group type is deprecated and not supported in proto3. However, Proto3 |
||||
// implementations should still be able to parse the group wire format and |
||||
// treat group fields as unknown fields. |
||||
TYPE_GROUP = 10; |
||||
TYPE_MESSAGE = 11; // Length-delimited aggregate. |
||||
|
||||
// New in version 2. |
||||
TYPE_BYTES = 12; |
||||
TYPE_UINT32 = 13; |
||||
TYPE_ENUM = 14; |
||||
TYPE_SFIXED32 = 15; |
||||
TYPE_SFIXED64 = 16; |
||||
TYPE_SINT32 = 17; // Uses ZigZag encoding. |
||||
TYPE_SINT64 = 18; // Uses ZigZag encoding. |
||||
}; |
||||
|
||||
enum Label { |
||||
// 0 is reserved for errors |
||||
LABEL_OPTIONAL = 1; |
||||
LABEL_REQUIRED = 2; |
||||
LABEL_REPEATED = 3; |
||||
}; |
||||
|
||||
optional string name = 1; |
||||
optional int32 number = 3; |
||||
optional Label label = 4; |
||||
|
||||
// If type_name is set, this need not be set. If both this and type_name |
||||
// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. |
||||
optional Type type = 5; |
||||
|
||||
// For message and enum types, this is the name of the type. If the name |
||||
// starts with a '.', it is fully-qualified. Otherwise, C++-like scoping |
||||
// rules are used to find the type (i.e. first the nested types within this |
||||
// message are searched, then within the parent, on up to the root |
||||
// namespace). |
||||
optional string type_name = 6; |
||||
|
||||
// For extensions, this is the name of the type being extended. It is |
||||
// resolved in the same manner as type_name. |
||||
optional string extendee = 2; |
||||
|
||||
// For numeric types, contains the original text representation of the value. |
||||
// For booleans, "true" or "false". |
||||
// For strings, contains the default text contents (not escaped in any way). |
||||
// For bytes, contains the C escaped value. All bytes >= 128 are escaped. |
||||
// TODO(kenton): Base-64 encode? |
||||
optional string default_value = 7; |
||||
|
||||
// If set, gives the index of a oneof in the containing type's oneof_decl |
||||
// list. This field is a member of that oneof. |
||||
optional int32 oneof_index = 9; |
||||
|
||||
// JSON name of this field. The value is set by protocol compiler. If the |
||||
// user has set a "json_name" option on this field, that option's value |
||||
// will be used. Otherwise, it's deduced from the field's name by converting |
||||
// it to camelCase. |
||||
optional string json_name = 10; |
||||
|
||||
optional FieldOptions options = 8; |
||||
} |
||||
|
||||
// Describes a oneof. |
||||
message OneofDescriptorProto { |
||||
optional string name = 1; |
||||
optional OneofOptions options = 2; |
||||
} |
||||
|
||||
// Describes an enum type. |
||||
message EnumDescriptorProto { |
||||
optional string name = 1; |
||||
|
||||
repeated EnumValueDescriptorProto value = 2; |
||||
|
||||
optional EnumOptions options = 3; |
||||
|
||||
// Range of reserved numeric values. Reserved values may not be used by |
||||
// entries in the same enum. Reserved ranges may not overlap. |
||||
// |
||||
// Note that this is distinct from DescriptorProto.ReservedRange in that it |
||||
// is inclusive such that it can appropriately represent the entire int32 |
||||
// domain. |
||||
message EnumReservedRange { |
||||
optional int32 start = 1; // Inclusive. |
||||
optional int32 end = 2; // Inclusive. |
||||
} |
||||
|
||||
// Range of reserved numeric values. Reserved numeric values may not be used |
||||
// by enum values in the same enum declaration. Reserved ranges may not |
||||
// overlap. |
||||
repeated EnumReservedRange reserved_range = 4; |
||||
|
||||
// Reserved enum value names, which may not be reused. A given name may only |
||||
// be reserved once. |
||||
repeated string reserved_name = 5; |
||||
} |
||||
|
||||
// Describes a value within an enum. |
||||
message EnumValueDescriptorProto { |
||||
optional string name = 1; |
||||
optional int32 number = 2; |
||||
|
||||
optional EnumValueOptions options = 3; |
||||
} |
||||
|
||||
// Describes a service. |
||||
message ServiceDescriptorProto { |
||||
optional string name = 1; |
||||
repeated MethodDescriptorProto method = 2; |
||||
|
||||
optional ServiceOptions options = 3; |
||||
} |
||||
|
||||
// Describes a method of a service. |
||||
message MethodDescriptorProto { |
||||
optional string name = 1; |
||||
|
||||
// Input and output type names. These are resolved in the same way as |
||||
// FieldDescriptorProto.type_name, but must refer to a message type. |
||||
optional string input_type = 2; |
||||
optional string output_type = 3; |
||||
|
||||
optional MethodOptions options = 4; |
||||
|
||||
// Identifies if client streams multiple client messages |
||||
optional bool client_streaming = 5 [default=false]; |
||||
// Identifies if server streams multiple server messages |
||||
optional bool server_streaming = 6 [default=false]; |
||||
} |
||||
|
||||
|
||||
// =================================================================== |
||||
// Options |
||||
|
||||
// Each of the definitions above may have "options" attached. These are |
||||
// just annotations which may cause code to be generated slightly differently |
||||
// or may contain hints for code that manipulates protocol messages. |
||||
// |
||||
// Clients may define custom options as extensions of the *Options messages. |
||||
// These extensions may not yet be known at parsing time, so the parser cannot |
||||
// store the values in them. Instead it stores them in a field in the *Options |
||||
// message called uninterpreted_option. This field must have the same name |
||||
// across all *Options messages. We then use this field to populate the |
||||
// extensions when we build a descriptor, at which point all protos have been |
||||
// parsed and so all extensions are known. |
||||
// |
||||
// Extension numbers for custom options may be chosen as follows: |
||||
// * For options which will only be used within a single application or |
||||
// organization, or for experimental options, use field numbers 50000 |
||||
// through 99999. It is up to you to ensure that you do not use the |
||||
// same number for multiple options. |
||||
// * For options which will be published and used publicly by multiple |
||||
// independent entities, e-mail protobuf-global-extension-registry@google.com |
||||
// to reserve extension numbers. Simply provide your project name (e.g. |
||||
// Objective-C plugin) and your project website (if available) -- there's no |
||||
// need to explain how you intend to use them. Usually you only need one |
||||
// extension number. You can declare multiple options with only one extension |
||||
// number by putting them in a sub-message. See the Custom Options section of |
||||
// the docs for examples: |
||||
// https://developers.google.com/protocol-buffers/docs/proto#options |
||||
// If this turns out to be popular, a web service will be set up |
||||
// to automatically assign option numbers. |
||||
|
||||
|
||||
message FileOptions { |
||||
|
||||
// Sets the Java package where classes generated from this .proto will be |
||||
// placed. By default, the proto package is used, but this is often |
||||
// inappropriate because proto packages do not normally start with backwards |
||||
// domain names. |
||||
optional string java_package = 1; |
||||
|
||||
|
||||
// If set, all the classes from the .proto file are wrapped in a single |
||||
// outer class with the given name. This applies to both Proto1 |
||||
// (equivalent to the old "--one_java_file" option) and Proto2 (where |
||||
// a .proto always translates to a single class, but you may want to |
||||
// explicitly choose the class name). |
||||
optional string java_outer_classname = 8; |
||||
|
||||
// If set true, then the Java code generator will generate a separate .java |
||||
// file for each top-level message, enum, and service defined in the .proto |
||||
// file. Thus, these types will *not* be nested inside the outer class |
||||
// named by java_outer_classname. However, the outer class will still be |
||||
// generated to contain the file's getDescriptor() method as well as any |
||||
// top-level extensions defined in the file. |
||||
optional bool java_multiple_files = 10 [default=false]; |
||||
|
||||
// This option does nothing. |
||||
optional bool java_generate_equals_and_hash = 20 [deprecated=true]; |
||||
|
||||
// If set true, then the Java2 code generator will generate code that |
||||
// throws an exception whenever an attempt is made to assign a non-UTF-8 |
||||
// byte sequence to a string field. |
||||
// Message reflection will do the same. |
||||
// However, an extension field still accepts non-UTF-8 byte sequences. |
||||
// This option has no effect on when used with the lite runtime. |
||||
optional bool java_string_check_utf8 = 27 [default=false]; |
||||
|
||||
|
||||
// Generated classes can be optimized for speed or code size. |
||||
enum OptimizeMode { |
||||
SPEED = 1; // Generate complete code for parsing, serialization, |
||||
// etc. |
||||
CODE_SIZE = 2; // Use ReflectionOps to implement these methods. |
||||
LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. |
||||
} |
||||
optional OptimizeMode optimize_for = 9 [default=SPEED]; |
||||
|
||||
// Sets the Go package where structs generated from this .proto will be |
||||
// placed. If omitted, the Go package will be derived from the following: |
||||
// - The basename of the package import path, if provided. |
||||
// - Otherwise, the package statement in the .proto file, if present. |
||||
// - Otherwise, the basename of the .proto file, without extension. |
||||
optional string go_package = 11; |
||||
|
||||
|
||||
|
||||
// Should generic services be generated in each language? "Generic" services |
||||
// are not specific to any particular RPC system. They are generated by the |
||||
// main code generators in each language (without additional plugins). |
||||
// Generic services were the only kind of service generation supported by |
||||
// early versions of google.protobuf. |
||||
// |
||||
// Generic services are now considered deprecated in favor of using plugins |
||||
// that generate code specific to your particular RPC system. Therefore, |
||||
// these default to false. Old code which depends on generic services should |
||||
// explicitly set them to true. |
||||
optional bool cc_generic_services = 16 [default=false]; |
||||
optional bool java_generic_services = 17 [default=false]; |
||||
optional bool py_generic_services = 18 [default=false]; |
||||
optional bool php_generic_services = 42 [default=false]; |
||||
|
||||
// Is this file deprecated? |
||||
// Depending on the target platform, this can emit Deprecated annotations |
||||
// for everything in the file, or it will be completely ignored; in the very |
||||
// least, this is a formalization for deprecating files. |
||||
optional bool deprecated = 23 [default=false]; |
||||
|
||||
// Enables the use of arenas for the proto messages in this file. This applies |
||||
// only to generated classes for C++. |
||||
optional bool cc_enable_arenas = 31 [default=false]; |
||||
|
||||
|
||||
// Sets the objective c class prefix which is prepended to all objective c |
||||
// generated classes from this .proto. There is no default. |
||||
optional string objc_class_prefix = 36; |
||||
|
||||
// Namespace for generated classes; defaults to the package. |
||||
optional string csharp_namespace = 37; |
||||
|
||||
// By default Swift generators will take the proto package and CamelCase it |
||||
// replacing '.' with underscore and use that to prefix the types/symbols |
||||
// defined. When this options is provided, they will use this value instead |
||||
// to prefix the types/symbols defined. |
||||
optional string swift_prefix = 39; |
||||
|
||||
// Sets the php class prefix which is prepended to all php generated classes |
||||
// from this .proto. Default is empty. |
||||
optional string php_class_prefix = 40; |
||||
|
||||
// Use this option to change the namespace of php generated classes. Default |
||||
// is empty. When this option is empty, the package name will be used for |
||||
// determining the namespace. |
||||
optional string php_namespace = 41; |
||||
|
||||
|
||||
// Use this option to change the namespace of php generated metadata classes. |
||||
// Default is empty. When this option is empty, the proto file name will be used |
||||
// for determining the namespace. |
||||
optional string php_metadata_namespace = 44; |
||||
|
||||
// Use this option to change the package of ruby generated classes. Default |
||||
// is empty. When this option is not set, the package name will be used for |
||||
// determining the ruby package. |
||||
optional string ruby_package = 45; |
||||
|
||||
// The parser stores options it doesn't recognize here. |
||||
// See the documentation for the "Options" section above. |
||||
repeated UninterpretedOption uninterpreted_option = 999; |
||||
|
||||
// Clients can define custom options in extensions of this message. |
||||
// See the documentation for the "Options" section above. |
||||
extensions 1000 to max; |
||||
|
||||
reserved 38; |
||||
} |
||||
|
||||
message MessageOptions { |
||||
// Set true to use the old proto1 MessageSet wire format for extensions. |
||||
// This is provided for backwards-compatibility with the MessageSet wire |
||||
// format. You should not use this for any other reason: It's less |
||||
// efficient, has fewer features, and is more complicated. |
||||
// |
||||
// The message must be defined exactly as follows: |
||||
// message Foo { |
||||
// option message_set_wire_format = true; |
||||
// extensions 4 to max; |
||||
// } |
||||
// Note that the message cannot have any defined fields; MessageSets only |
||||
// have extensions. |
||||
// |
||||
// All extensions of your type must be singular messages; e.g. they cannot |
||||
// be int32s, enums, or repeated messages. |
||||
// |
||||
// Because this is an option, the above two restrictions are not enforced by |
||||
// the protocol compiler. |
||||
optional bool message_set_wire_format = 1 [default=false]; |
||||
|
||||
// Disables the generation of the standard "descriptor()" accessor, which can |
||||
// conflict with a field of the same name. This is meant to make migration |
||||
// from proto1 easier; new code should avoid fields named "descriptor". |
||||
optional bool no_standard_descriptor_accessor = 2 [default=false]; |
||||
|
||||
// Is this message deprecated? |
||||
// Depending on the target platform, this can emit Deprecated annotations |
||||
// for the message, or it will be completely ignored; in the very least, |
||||
// this is a formalization for deprecating messages. |
||||
optional bool deprecated = 3 [default=false]; |
||||
|
||||
// Whether the message is an automatically generated map entry type for the |
||||
// maps field. |
||||
// |
||||
// For maps fields: |
||||
// map<KeyType, ValueType> map_field = 1; |
||||
// The parsed descriptor looks like: |
||||
// message MapFieldEntry { |
||||
// option map_entry = true; |
||||
// optional KeyType key = 1; |
||||
// optional ValueType value = 2; |
||||
// } |
||||
// repeated MapFieldEntry map_field = 1; |
||||
// |
||||
// Implementations may choose not to generate the map_entry=true message, but |
||||
// use a native map in the target language to hold the keys and values. |
||||
// The reflection APIs in such implementions still need to work as |
||||
// if the field is a repeated message field. |
||||
// |
||||
// NOTE: Do not set the option in .proto files. Always use the maps syntax |
||||
// instead. The option should only be implicitly set by the proto compiler |
||||
// parser. |
||||
optional bool map_entry = 7; |
||||
|
||||
reserved 8; // javalite_serializable |
||||
reserved 9; // javanano_as_lite |
||||
|
||||
// The parser stores options it doesn't recognize here. See above. |
||||
repeated UninterpretedOption uninterpreted_option = 999; |
||||
|
||||
// Clients can define custom options in extensions of this message. See above. |
||||
extensions 1000 to max; |
||||
} |
||||
|
||||
message FieldOptions { |
||||
// The ctype option instructs the C++ code generator to use a different |
||||
// representation of the field than it normally would. See the specific |
||||
// options below. This option is not yet implemented in the open source |
||||
// release -- sorry, we'll try to include it in a future version! |
||||
optional CType ctype = 1 [default = STRING]; |
||||
enum CType { |
||||
// Default mode. |
||||
STRING = 0; |
||||
|
||||
CORD = 1; |
||||
|
||||
STRING_PIECE = 2; |
||||
} |
||||
// The packed option can be enabled for repeated primitive fields to enable |
||||
// a more efficient representation on the wire. Rather than repeatedly |
||||
// writing the tag and type for each element, the entire array is encoded as |
||||
// a single length-delimited blob. In proto3, only explicit setting it to |
||||
// false will avoid using packed encoding. |
||||
optional bool packed = 2; |
||||
|
||||
// The jstype option determines the JavaScript type used for values of the |
||||
// field. The option is permitted only for 64 bit integral and fixed types |
||||
// (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING |
||||
// is represented as JavaScript string, which avoids loss of precision that |
||||
// can happen when a large value is converted to a floating point JavaScript. |
||||
// Specifying JS_NUMBER for the jstype causes the generated JavaScript code to |
||||
// use the JavaScript "number" type. The behavior of the default option |
||||
// JS_NORMAL is implementation dependent. |
||||
// |
||||
// This option is an enum to permit additional types to be added, e.g. |
||||
// goog.math.Integer. |
||||
optional JSType jstype = 6 [default = JS_NORMAL]; |
||||
enum JSType { |
||||
// Use the default type. |
||||
JS_NORMAL = 0; |
||||
|
||||
// Use JavaScript strings. |
||||
JS_STRING = 1; |
||||
|
||||
// Use JavaScript numbers. |
||||
JS_NUMBER = 2; |
||||
} |
||||
|
||||
// Should this field be parsed lazily? Lazy applies only to message-type |
||||
// fields. It means that when the outer message is initially parsed, the |
||||
// inner message's contents will not be parsed but instead stored in encoded |
||||
// form. The inner message will actually be parsed when it is first accessed. |
||||
// |
||||
// This is only a hint. Implementations are free to choose whether to use |
||||
// eager or lazy parsing regardless of the value of this option. However, |
||||
// setting this option true suggests that the protocol author believes that |
||||
// using lazy parsing on this field is worth the additional bookkeeping |
||||
// overhead typically needed to implement it. |
||||
// |
||||
// This option does not affect the public interface of any generated code; |
||||
// all method signatures remain the same. Furthermore, thread-safety of the |
||||
// interface is not affected by this option; const methods remain safe to |
||||
// call from multiple threads concurrently, while non-const methods continue |
||||
// to require exclusive access. |
||||
// |
||||
// |
||||
// Note that implementations may choose not to check required fields within |
||||
// a lazy sub-message. That is, calling IsInitialized() on the outer message |
||||
// may return true even if the inner message has missing required fields. |
||||
// This is necessary because otherwise the inner message would have to be |
||||
// parsed in order to perform the check, defeating the purpose of lazy |
||||
// parsing. An implementation which chooses not to check required fields |
||||
// must be consistent about it. That is, for any particular sub-message, the |
||||
// implementation must either *always* check its required fields, or *never* |
||||
// check its required fields, regardless of whether or not the message has |
||||
// been parsed. |
||||
optional bool lazy = 5 [default=false]; |
||||
|
||||
// Is this field deprecated? |
||||
// Depending on the target platform, this can emit Deprecated annotations |
||||
// for accessors, or it will be completely ignored; in the very least, this |
||||
// is a formalization for deprecating fields. |
||||
optional bool deprecated = 3 [default=false]; |
||||
|
||||
// For Google-internal migration only. Do not use. |
||||
optional bool weak = 10 [default=false]; |
||||
|
||||
|
||||
// The parser stores options it doesn't recognize here. See above. |
||||
repeated UninterpretedOption uninterpreted_option = 999; |
||||
|
||||
// Clients can define custom options in extensions of this message. See above. |
||||
extensions 1000 to max; |
||||
|
||||
reserved 4; // removed jtype |
||||
} |
||||
|
||||
message OneofOptions { |
||||
// The parser stores options it doesn't recognize here. See above. |
||||
repeated UninterpretedOption uninterpreted_option = 999; |
||||
|
||||
// Clients can define custom options in extensions of this message. See above. |
||||
extensions 1000 to max; |
||||
} |
||||
|
||||
message EnumOptions { |
||||
|
||||
// Set this option to true to allow mapping different tag names to the same |
||||
// value. |
||||
optional bool allow_alias = 2; |
||||
|
||||
// Is this enum deprecated? |
||||
// Depending on the target platform, this can emit Deprecated annotations |
||||
// for the enum, or it will be completely ignored; in the very least, this |
||||
// is a formalization for deprecating enums. |
||||
optional bool deprecated = 3 [default=false]; |
||||
|
||||
reserved 5; // javanano_as_lite |
||||
|
||||
// The parser stores options it doesn't recognize here. See above. |
||||
repeated UninterpretedOption uninterpreted_option = 999; |
||||
|
||||
// Clients can define custom options in extensions of this message. See above. |
||||
extensions 1000 to max; |
||||
} |
||||
|
||||
message EnumValueOptions { |
||||
// Is this enum value deprecated? |
||||
// Depending on the target platform, this can emit Deprecated annotations |
||||
// for the enum value, or it will be completely ignored; in the very least, |
||||
// this is a formalization for deprecating enum values. |
||||
optional bool deprecated = 1 [default=false]; |
||||
|
||||
// The parser stores options it doesn't recognize here. See above. |
||||
repeated UninterpretedOption uninterpreted_option = 999; |
||||
|
||||
// Clients can define custom options in extensions of this message. See above. |
||||
extensions 1000 to max; |
||||
} |
||||
|
||||
message ServiceOptions { |
||||
|
||||
// Note: Field numbers 1 through 32 are reserved for Google's internal RPC |
||||
// framework. We apologize for hoarding these numbers to ourselves, but |
||||
// we were already using them long before we decided to release Protocol |
||||
// Buffers. |
||||
|
||||
// Is this service deprecated? |
||||
// Depending on the target platform, this can emit Deprecated annotations |
||||
// for the service, or it will be completely ignored; in the very least, |
||||
// this is a formalization for deprecating services. |
||||
optional bool deprecated = 33 [default=false]; |
||||
|
||||
// The parser stores options it doesn't recognize here. See above. |
||||
repeated UninterpretedOption uninterpreted_option = 999; |
||||
|
||||
// Clients can define custom options in extensions of this message. See above. |
||||
extensions 1000 to max; |
||||
} |
||||
|
||||
message MethodOptions { |
||||
|
||||
// Note: Field numbers 1 through 32 are reserved for Google's internal RPC |
||||
// framework. We apologize for hoarding these numbers to ourselves, but |
||||
// we were already using them long before we decided to release Protocol |
||||
// Buffers. |
||||
|
||||
// Is this method deprecated? |
||||
// Depending on the target platform, this can emit Deprecated annotations |
||||
// for the method, or it will be completely ignored; in the very least, |
||||
// this is a formalization for deprecating methods. |
||||
optional bool deprecated = 33 [default=false]; |
||||
|
||||
// Is this method side-effect-free (or safe in HTTP parlance), or idempotent, |
||||
// or neither? HTTP based RPC implementation may choose GET verb for safe |
||||
// methods, and PUT verb for idempotent methods instead of the default POST. |
||||
enum IdempotencyLevel { |
||||
IDEMPOTENCY_UNKNOWN = 0; |
||||
NO_SIDE_EFFECTS = 1; // implies idempotent |
||||
IDEMPOTENT = 2; // idempotent, but may have side effects |
||||
} |
||||
optional IdempotencyLevel idempotency_level = |
||||
34 [default=IDEMPOTENCY_UNKNOWN]; |
||||
|
||||
// The parser stores options it doesn't recognize here. See above. |
||||
repeated UninterpretedOption uninterpreted_option = 999; |
||||
|
||||
// Clients can define custom options in extensions of this message. See above. |
||||
extensions 1000 to max; |
||||
} |
||||
|
||||
|
||||
// A message representing a option the parser does not recognize. This only |
||||
// appears in options protos created by the compiler::Parser class. |
||||
// DescriptorPool resolves these when building Descriptor objects. Therefore, |
||||
// options protos in descriptor objects (e.g. returned by Descriptor::options(), |
||||
// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions |
||||
// in them. |
||||
message UninterpretedOption { |
||||
// The name of the uninterpreted option. Each string represents a segment in |
||||
// a dot-separated name. is_extension is true iff a segment represents an |
||||
// extension (denoted with parentheses in options specs in .proto files). |
||||
// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents |
||||
// "foo.(bar.baz).qux". |
||||
message NamePart { |
||||
required string name_part = 1; |
||||
required bool is_extension = 2; |
||||
} |
||||
repeated NamePart name = 2; |
||||
|
||||
// The value of the uninterpreted option, in whatever type the tokenizer |
||||
// identified it as during parsing. Exactly one of these should be set. |
||||
optional string identifier_value = 3; |
||||
optional uint64 positive_int_value = 4; |
||||
optional int64 negative_int_value = 5; |
||||
optional double double_value = 6; |
||||
optional bytes string_value = 7; |
||||
optional string aggregate_value = 8; |
||||
} |
||||
|
||||
// =================================================================== |
||||
// Optional source code info |
||||
|
||||
// Encapsulates information about the original source file from which a |
||||
// FileDescriptorProto was generated. |
||||
message SourceCodeInfo { |
||||
// A Location identifies a piece of source code in a .proto file which |
||||
// corresponds to a particular definition. This information is intended |
||||
// to be useful to IDEs, code indexers, documentation generators, and similar |
||||
// tools. |
||||
// |
||||
// For example, say we have a file like: |
||||
// message Foo { |
||||
// optional string foo = 1; |
||||
// } |
||||
// Let's look at just the field definition: |
||||
// optional string foo = 1; |
||||
// ^ ^^ ^^ ^ ^^^ |
||||
// a bc de f ghi |
||||
// We have the following locations: |
||||
// span path represents |
||||
// [a,i) [ 4, 0, 2, 0 ] The whole field definition. |
||||
// [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). |
||||
// [c,d) [ 4, 0, 2, 0, 5 ] The type (string). |
||||
// [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). |
||||
// [g,h) [ 4, 0, 2, 0, 3 ] The number (1). |
||||
// |
||||
// Notes: |
||||
// - A location may refer to a repeated field itself (i.e. not to any |
||||
// particular index within it). This is used whenever a set of elements are |
||||
// logically enclosed in a single code segment. For example, an entire |
||||
// extend block (possibly containing multiple extension definitions) will |
||||
// have an outer location whose path refers to the "extensions" repeated |
||||
// field without an index. |
||||
// - Multiple locations may have the same path. This happens when a single |
||||
// logical declaration is spread out across multiple places. The most |
||||
// obvious example is the "extend" block again -- there may be multiple |
||||
// extend blocks in the same scope, each of which will have the same path. |
||||
// - A location's span is not always a subset of its parent's span. For |
||||
// example, the "extendee" of an extension declaration appears at the |
||||
// beginning of the "extend" block and is shared by all extensions within |
||||
// the block. |
||||
// - Just because a location's span is a subset of some other location's span |
||||
// does not mean that it is a descendent. For example, a "group" defines |
||||
// both a type and a field in a single declaration. Thus, the locations |
||||
// corresponding to the type and field and their components will overlap. |
||||
// - Code which tries to interpret locations should probably be designed to |
||||
// ignore those that it doesn't understand, as more types of locations could |
||||
// be recorded in the future. |
||||
repeated Location location = 1; |
||||
message Location { |
||||
// Identifies which part of the FileDescriptorProto was defined at this |
||||
// location. |
||||
// |
||||
// Each element is a field number or an index. They form a path from |
||||
// the root FileDescriptorProto to the place where the definition. For |
||||
// example, this path: |
||||
// [ 4, 3, 2, 7, 1 ] |
||||
// refers to: |
||||
// file.message_type(3) // 4, 3 |
||||
// .field(7) // 2, 7 |
||||
// .name() // 1 |
||||
// This is because FileDescriptorProto.message_type has field number 4: |
||||
// repeated DescriptorProto message_type = 4; |
||||
// and DescriptorProto.field has field number 2: |
||||
// repeated FieldDescriptorProto field = 2; |
||||
// and FieldDescriptorProto.name has field number 1: |
||||
// optional string name = 1; |
||||
// |
||||
// Thus, the above path gives the location of a field name. If we removed |
||||
// the last element: |
||||
// [ 4, 3, 2, 7 ] |
||||
// this path refers to the whole field declaration (from the beginning |
||||
// of the label to the terminating semicolon). |
||||
repeated int32 path = 1 [packed=true]; |
||||
|
||||
// Always has exactly three or four elements: start line, start column, |
||||
// end line (optional, otherwise assumed same as start line), end column. |
||||
// These are packed into a single field for efficiency. Note that line |
||||
// and column numbers are zero-based -- typically you will want to add |
||||
// 1 to each before displaying to a user. |
||||
repeated int32 span = 2 [packed=true]; |
||||
|
||||
// If this SourceCodeInfo represents a complete declaration, these are any |
||||
// comments appearing before and after the declaration which appear to be |
||||
// attached to the declaration. |
||||
// |
||||
// A series of line comments appearing on consecutive lines, with no other |
||||
// tokens appearing on those lines, will be treated as a single comment. |
||||
// |
||||
// leading_detached_comments will keep paragraphs of comments that appear |
||||
// before (but not connected to) the current element. Each paragraph, |
||||
// separated by empty lines, will be one comment element in the repeated |
||||
// field. |
||||
// |
||||
// Only the comment content is provided; comment markers (e.g. //) are |
||||
// stripped out. For block comments, leading whitespace and an asterisk |
||||
// will be stripped from the beginning of each line other than the first. |
||||
// Newlines are included in the output. |
||||
// |
||||
// Examples: |
||||
// |
||||
// optional int32 foo = 1; // Comment attached to foo. |
||||
// // Comment attached to bar. |
||||
// optional int32 bar = 2; |
||||
// |
||||
// optional string baz = 3; |
||||
// // Comment attached to baz. |
||||
// // Another line attached to baz. |
||||
// |
||||
// // Comment attached to qux. |
||||
// // |
||||
// // Another line attached to qux. |
||||
// optional double qux = 4; |
||||
// |
||||
// // Detached comment for corge. This is not leading or trailing comments |
||||
// // to qux or corge because there are blank lines separating it from |
||||
// // both. |
||||
// |
||||
// // Detached comment for corge paragraph 2. |
||||
// |
||||
// optional string corge = 5; |
||||
// /* Block comment attached |
||||
// * to corge. Leading asterisks |
||||
// * will be removed. */ |
||||
// /* Block comment attached to |
||||
// * grault. */ |
||||
// optional int32 grault = 6; |
||||
// |
||||
// // ignored detached comments. |
||||
optional string leading_comments = 3; |
||||
optional string trailing_comments = 4; |
||||
repeated string leading_detached_comments = 6; |
||||
} |
||||
} |
||||
|
||||
// Describes the relationship between generated code and its original source |
||||
// file. A GeneratedCodeInfo message is associated with only one generated |
||||
// source file, but may contain references to different source .proto files. |
||||
message GeneratedCodeInfo { |
||||
// An Annotation connects some span of text in generated code to an element |
||||
// of its generating .proto file. |
||||
repeated Annotation annotation = 1; |
||||
message Annotation { |
||||
// Identifies the element in the original source .proto file. This field |
||||
// is formatted the same as SourceCodeInfo.Location.path. |
||||
repeated int32 path = 1 [packed=true]; |
||||
|
||||
// Identifies the filesystem path to the original source .proto. |
||||
optional string source_file = 2; |
||||
|
||||
// Identifies the starting offset in bytes in the generated code |
||||
// that relates to the identified object. |
||||
optional int32 begin = 3; |
||||
|
||||
// Identifies the ending offset in bytes in the generated code that |
||||
// relates to the identified offset. The end offset should be one past |
||||
// the last relevant byte (so the length of the text = end - begin). |
||||
optional int32 end = 4; |
||||
} |
||||
} |
Loading…
Reference in new issue