Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
dfss
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
7
Issues
7
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mpcs
dfss
Commits
d8ee0857
Commit
d8ee0857
authored
Feb 24, 2016
by
Loïck Bonniot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[p] Add JoinSignature API
parent
438c6a5f
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
271 additions
and
62 deletions
+271
-62
dfssp/api/gRPCServices.pb.go
dfssp/api/gRPCServices.pb.go
+58
-48
dfssp/api/gRPCServices.proto
dfssp/api/gRPCServices.proto
+7
-6
dfssp/contract/contract_test.go
dfssp/contract/contract_test.go
+20
-2
dfssp/contract/create_test.go
dfssp/contract/create_test.go
+2
-1
dfssp/contract/starter.go
dfssp/contract/starter.go
+94
-0
dfssp/contract/starter_test.go
dfssp/contract/starter_test.go
+58
-0
dfssp/entities/contract.go
dfssp/entities/contract.go
+14
-0
dfssp/server/server.go
dfssp/server/server.go
+14
-1
net/server.go
net/server.go
+4
-4
No files found.
dfssp/api/gRPCServices.pb.go
View file @
d8ee0857
...
@@ -17,6 +17,7 @@ It has these top-level messages:
...
@@ -17,6 +17,7 @@ It has these top-level messages:
PostContractRequest
PostContractRequest
JoinSignatureRequest
JoinSignatureRequest
UserConnected
UserConnected
User
ReadySignRequest
ReadySignRequest
LaunchSignature
LaunchSignature
*/
*/
...
@@ -161,6 +162,7 @@ func (*JoinSignatureRequest) Descriptor() ([]byte, []int) { return fileDescripto
...
@@ -161,6 +162,7 @@ func (*JoinSignatureRequest) Descriptor() ([]byte, []int) { return fileDescripto
type
UserConnected
struct
{
type
UserConnected
struct
{
ErrorCode
*
ErrorCode
`protobuf:"bytes,1,opt,name=errorCode" json:"errorCode,omitempty"`
ErrorCode
*
ErrorCode
`protobuf:"bytes,1,opt,name=errorCode" json:"errorCode,omitempty"`
ContractUuid
string
`protobuf:"bytes,2,opt,name=contractUuid" json:"contractUuid,omitempty"`
ContractUuid
string
`protobuf:"bytes,2,opt,name=contractUuid" json:"contractUuid,omitempty"`
User
*
User
`protobuf:"bytes,3,opt,name=user" json:"user,omitempty"`
}
}
func
(
m
*
UserConnected
)
Reset
()
{
*
m
=
UserConnected
{}
}
func
(
m
*
UserConnected
)
Reset
()
{
*
m
=
UserConnected
{}
}
...
@@ -175,17 +177,24 @@ func (m *UserConnected) GetErrorCode() *ErrorCode {
...
@@ -175,17 +177,24 @@ func (m *UserConnected) GetErrorCode() *ErrorCode {
return
nil
return
nil
}
}
type
UserConnected_User
struct
{
func
(
m
*
UserConnected
)
GetUser
()
*
User
{
KeyHash
[]
byte
`protobuf:"bytes,1,opt,name=KeyHash,proto3" json:"KeyHash,omitempty"`
if
m
!=
nil
{
return
m
.
User
}
return
nil
}
type
User
struct
{
KeyHash
[]
byte
`protobuf:"bytes,1,opt,name=keyHash,proto3" json:"keyHash,omitempty"`
Email
string
`protobuf:"bytes,2,opt,name=email" json:"email,omitempty"`
Email
string
`protobuf:"bytes,2,opt,name=email" json:"email,omitempty"`
Ip
string
`protobuf:"bytes,3,opt,name=ip" json:"ip,omitempty"`
Ip
string
`protobuf:"bytes,3,opt,name=ip" json:"ip,omitempty"`
Port
uint32
`protobuf:"varint,4,opt,name=port" json:"port,omitempty"`
Port
uint32
`protobuf:"varint,4,opt,name=port" json:"port,omitempty"`
}
}
func
(
m
*
User
Connected_User
)
Reset
()
{
*
m
=
UserConnected_
User
{}
}
func
(
m
*
User
)
Reset
()
{
*
m
=
User
{}
}
func
(
m
*
User
Connected_User
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
User
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
User
Connected_User
)
ProtoMessage
()
{}
func
(
*
User
)
ProtoMessage
()
{}
func
(
*
User
Connected_User
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor0
,
[]
int
{
7
,
0
}
}
func
(
*
User
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor0
,
[]
int
{
8
}
}
// ReadySignRequest contains the contract unique identitier that is ready to be signed
// ReadySignRequest contains the contract unique identitier that is ready to be signed
type
ReadySignRequest
struct
{
type
ReadySignRequest
struct
{
...
@@ -195,7 +204,7 @@ type ReadySignRequest struct {
...
@@ -195,7 +204,7 @@ type ReadySignRequest struct {
func
(
m
*
ReadySignRequest
)
Reset
()
{
*
m
=
ReadySignRequest
{}
}
func
(
m
*
ReadySignRequest
)
Reset
()
{
*
m
=
ReadySignRequest
{}
}
func
(
m
*
ReadySignRequest
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
ReadySignRequest
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
ReadySignRequest
)
ProtoMessage
()
{}
func
(
*
ReadySignRequest
)
ProtoMessage
()
{}
func
(
*
ReadySignRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor0
,
[]
int
{
8
}
}
func
(
*
ReadySignRequest
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor0
,
[]
int
{
9
}
}
// LaunchSignature is emitted by the platform when every signers are ready
// LaunchSignature is emitted by the platform when every signers are ready
type
LaunchSignature
struct
{
type
LaunchSignature
struct
{
...
@@ -207,7 +216,7 @@ type LaunchSignature struct {
...
@@ -207,7 +216,7 @@ type LaunchSignature struct {
func
(
m
*
LaunchSignature
)
Reset
()
{
*
m
=
LaunchSignature
{}
}
func
(
m
*
LaunchSignature
)
Reset
()
{
*
m
=
LaunchSignature
{}
}
func
(
m
*
LaunchSignature
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
m
*
LaunchSignature
)
String
()
string
{
return
proto
.
CompactTextString
(
m
)
}
func
(
*
LaunchSignature
)
ProtoMessage
()
{}
func
(
*
LaunchSignature
)
ProtoMessage
()
{}
func
(
*
LaunchSignature
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor0
,
[]
int
{
9
}
}
func
(
*
LaunchSignature
)
Descriptor
()
([]
byte
,
[]
int
)
{
return
fileDescriptor0
,
[]
int
{
10
}
}
func
(
m
*
LaunchSignature
)
GetErrorCode
()
*
ErrorCode
{
func
(
m
*
LaunchSignature
)
GetErrorCode
()
*
ErrorCode
{
if
m
!=
nil
{
if
m
!=
nil
{
...
@@ -225,7 +234,7 @@ func init() {
...
@@ -225,7 +234,7 @@ func init() {
proto
.
RegisterType
((
*
PostContractRequest
)(
nil
),
"api.PostContractRequest"
)
proto
.
RegisterType
((
*
PostContractRequest
)(
nil
),
"api.PostContractRequest"
)
proto
.
RegisterType
((
*
JoinSignatureRequest
)(
nil
),
"api.JoinSignatureRequest"
)
proto
.
RegisterType
((
*
JoinSignatureRequest
)(
nil
),
"api.JoinSignatureRequest"
)
proto
.
RegisterType
((
*
UserConnected
)(
nil
),
"api.UserConnected"
)
proto
.
RegisterType
((
*
UserConnected
)(
nil
),
"api.UserConnected"
)
proto
.
RegisterType
((
*
User
Connected_User
)(
nil
),
"api.UserConnected
.User"
)
proto
.
RegisterType
((
*
User
)(
nil
),
"api
.User"
)
proto
.
RegisterType
((
*
ReadySignRequest
)(
nil
),
"api.ReadySignRequest"
)
proto
.
RegisterType
((
*
ReadySignRequest
)(
nil
),
"api.ReadySignRequest"
)
proto
.
RegisterType
((
*
LaunchSignature
)(
nil
),
"api.LaunchSignature"
)
proto
.
RegisterType
((
*
LaunchSignature
)(
nil
),
"api.LaunchSignature"
)
proto
.
RegisterEnum
(
"api.ErrorCode_Code"
,
ErrorCode_Code_name
,
ErrorCode_Code_value
)
proto
.
RegisterEnum
(
"api.ErrorCode_Code"
,
ErrorCode_Code_name
,
ErrorCode_Code_value
)
...
@@ -462,43 +471,44 @@ var _Platform_serviceDesc = grpc.ServiceDesc{
...
@@ -462,43 +471,44 @@ var _Platform_serviceDesc = grpc.ServiceDesc{
}
}
var
fileDescriptor0
=
[]
byte
{
var
fileDescriptor0
=
[]
byte
{
// 605 bytes of a gzipped FileDescriptorProto
// 618 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x09
,
0x6e
,
0x88
,
0x02
,
0xff
,
0x94
,
0x54
,
0x6f
,
0x6f
,
0xd2
,
0x40
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x09
,
0x6e
,
0x88
,
0x02
,
0xff
,
0x94
,
0x54
,
0x5f
,
0x6f
,
0xd3
,
0x3e
,
0x18
,
0xa7
,
0xa5
,
0x1b
,
0xe3
,
0xd9
,
0x60
,
0xcd
,
0x31
,
0x4d
,
0xed
,
0x0b
,
0xb3
,
0x5c
,
0x4c
,
0x34
,
0x14
,
0x6d
,
0xd2
,
0xec
,
0x4f
,
0xee
,
0xd6
,
0x2e
,
0x72
,
0xf7
,
0xfb
,
0x29
,
0x54
,
0x02
,
0x4d
,
0x16
,
0xc6
,
0xe0
,
0x82
,
0x89
,
0x89
,
0xbe
,
0xeb
,
0x2a
,
0xd9
,
0xa6
,
0x86
,
0x90
,
0x63
,
0x68
,
0xe2
,
0xbb
,
0x12
,
0x08
,
0xa1
,
0x32
,
0x15
,
0x09
,
0x09
,
0xde
,
0xb2
,
0x50
,
0x6d
,
0x43
,
0xa8
,
0x9a
,
0xdc
,
0x15
,
0x5a
,
0x6e
,
0xd0
,
0x8c
,
0xb6
,
0x78
,
0x3d
,
0x34
,
0xbc
,
0xf2
,
0x9b
,
0xf8
,
0x4d
,
0xfc
,
0x1c
,
0x7e
,
0x24
,
0xde
,
0x42
,
0xea
,
0xb5
,
0xd1
,
0x9a
,
0xa4
,
0x38
,
0x0e
,
0x68
,
0x4f
,
0xf0
,
0x49
,
0xf8
,
0x5a
,
0x1c
,
0xbd
,
0xbb
,
0xf6
,
0xa0
,
0x65
,
0xc4
,
0x64
,
0xbc
,
0x80
,
0xfe
,
0x9e
,
0xff
,
0xcf
,
0xef
,
0xf9
,
0x7c
,
0x1c
,
0xb0
,
0x9d
,
0x38
,
0x4d
,
0x4a
,
0x85
,
0xb4
,
0x3e
,
0xb4
,
0x3e
,
0xd7
,
0xd7
,
0xe7
,
0xf8
,
0x15
,
0x40
,
0x53
,
0x32
,
0xf4
,
0x47
,
0x94
,
0x7d
,
0x8f
,
0x42
,
0x9a
,
0x75
,
0x17
,
0x2c
,
0xe5
,
0x29
,
0x9e
,
0x7b
,
0x5d
,
0x40
,
0x73
,
0x72
,
0xe5
,
0x4f
,
0x28
,
0xfb
,
0x1a
,
0x85
,
0x34
,
0x1b
,
0xac
,
0x58
,
0xaa
,
0x07
,
0x8b
,
0x08
,
0x7b
,
0x70
,
0x4c
,
0xe8
,
0x34
,
0xca
,
0x38
,
0x65
,
0x84
,
0x7e
,
0x5b
,
0xd2
,
0xca
,
0x53
,
0xd4
,
0x0e
,
0x56
,
0x11
,
0xf6
,
0xe0
,
0x88
,
0xd0
,
0x79
,
0x94
,
0x71
,
0xca
,
0x08
,
0xfd
,
0x8c
,
0xa3
,
0x13
,
0xd8
,
0xa3
,
0x71
,
0x10
,
0xcd
,
0x1d
,
0xe3
,
0xd4
,
0x78
,
0xd6
,
0x24
,
0x39
,
0x40
,
0x92
,
0xd3
,
0x8c
,
0xa3
,
0x63
,
0xd8
,
0xa1
,
0x71
,
0x10
,
0x2d
,
0x5d
,
0xe3
,
0xc4
,
0x78
,
0x6a
,
0x93
,
0x0e
,
0x34
,
0x58
,
0x1e
,
0xe0
,
0x98
,
0xca
,
0xae
,
0x21
,
0xfe
,
0x65
,
0x40
,
0xb3
,
0xcf
,
0x58
,
0xca
,
0x02
,
0x20
,
0x17
,
0xf6
,
0x58
,
0x91
,
0xe0
,
0x9a
,
0x2a
,
0xae
,
0x21
,
0xfe
,
0x69
,
0x80
,
0x3d
,
0x62
,
0xfc
,
0x74
,
0x42
,
0xd1
,
0x53
,
0xb0
,
0x42
,
0xf1
,
0xab
,
0x92
,
0xdb
,
0xbd
,
0x4e
,
0x57
,
0x34
,
0xe9
,
0x2c
,
0x65
,
0x7e
,
0x3a
,
0xa3
,
0xe8
,
0x09
,
0x58
,
0xa1
,
0xf8
,
0x55
,
0x87
,
0xbb
,
0xc3
,
0xde
,
0x40
,
0xae
,
0xbd
,
0x5d
,
0xf9
,
0x45
,
0x54
,
0x80
,
0x2c
,
0x18
,
0xd3
,
0x2c
,
0x0b
,
0xa6
,
0x54
,
0x17
,
0x2c
,
0x88
,
0x0c
,
0xaa
,
0xdd
,
0x81
,
0xfc
,
0x22
,
0x2a
,
0x41
,
0x12
,
0xc6
,
0x34
,
0xcb
,
0x82
,
0x39
,
0xd5
,
0x20
,
0x1e
,
0x80
,
0xa5
,
0x4a
,
0x1d
,
0x42
,
0x63
,
0x34
,
0xf6
,
0xfd
,
0xfe
,
0x68
,
0x64
,
0xd7
,
0x10
,
0x84
,
0x25
,
0xc4
,
0x63
,
0xb0
,
0x14
,
0xd5
,
0x01
,
0xec
,
0x4d
,
0xa6
,
0xbe
,
0x3f
,
0x9a
,
0x4c
,
0x9c
,
0xc0
,
0xfe
,
0xd5
,
0xe0
,
0x93
,
0x47
,
0x2e
,
0x6c
,
0x43
,
0x3a
,
0xce
,
0xbd
,
0x77
,
0xde
,
0xf8
,
0xfa
,
0x16
,
0x02
,
0xd8
,
0xbd
,
0x1c
,
0x7f
,
0xf0
,
0xc8
,
0xb9
,
0x63
,
0xc8
,
0x8d
,
0x33
,
0xef
,
0xad
,
0x37
,
0xd2
,
0x36
,
0x25
,
0xf8
,
0xec
,
0x91
,
0xc1
,
0xd5
,
0xe0
,
0xc2
,
0xae
,
0xa3
,
0x8e
,
0x8c
,
0xba
,
0xee
,
0xbd
,
0xbe
,
0x70
,
0x4c
,
0x09
,
0x3e
,
0x7a
,
0x64
,
0x7c
,
0x39
,
0x3e
,
0x77
,
0xda
,
0xa8
,
0x27
,
0xb3
,
0x13
,
0x62
,
0xff
,
0xd5
,
0x1f
,
0x03
,
0xbf
,
0x81
,
0x43
,
0x6f
,
0xc9
,
0x67
,
0xff
,
0xdf
,
0x4f
,
0x58
,
0xae
,
0x47
,
0x84
,
0x38
,
0xbf
,
0xf5
,
0xc7
,
0xc0
,
0xaf
,
0xe1
,
0xc0
,
0xcb
,
0xf9
,
0xe2
,
0xdf
,
0xf5
,
0x79
,
0x7a
,
0x4b
,
0x93
,
0x62
,
0x98
,
0x1c
,
0xe0
,
0x33
,
0x68
,
0x6b
,
0x7a
,
0xe8
,
0x64
,
0x9c
,
0x51
,
0x89
,
0x28
,
0x4f
,
0x6f
,
0x69
,
0x52
,
0x5e
,
0xa6
,
0x00
,
0xf8
,
0x14
,
0xba
,
0xda
,
0x1e
,
0x3a
,
0x9b
,
0x86
,
0x1e
,
0x03
,
0x84
,
0xf3
,
0x88
,
0x26
,
0xdc
,
0xa7
,
0x8c
,
0x17
,
0x25
,
0x4a
,
0x16
,
0xdc
,
0x80
,
0x66
,
0x94
,
0xa1
,
0x47
,
0x00
,
0xe1
,
0x32
,
0xa2
,
0x09
,
0xf7
,
0x29
,
0xe3
,
0x25
,
0x45
,
0x2d
,
0x82
,
0xbd
,
0x7e
,
0xbc
,
0xe0
,
0x2b
,
0xfc
,
0x03
,
0x3a
,
0xc3
,
0x34
,
0xe3
,
0x7e
,
0x9a
,
0x70
,
0x16
,
0x84
,
0xf7
,
0x60
,
0x67
,
0x14
,
0xaf
,
0xf8
,
0x1d
,
0xfe
,
0x06
,
0xbd
,
0xab
,
0x34
,
0xe3
,
0x7e
,
0x9a
,
0x70
,
0x5c
,
0x77
,
0x47
,
0x60
,
0xcd
,
0x82
,
0x6c
,
0xa6
,
0x32
,
0x8f
,
0x88
,
0x7a
,
0x46
,
0x2e
,
0x1c
,
0xdc
,
0x16
,
0x84
,
0x5c
,
0xab
,
0x23
,
0xb0
,
0x16
,
0x41
,
0xb6
,
0x50
,
0x27
,
0x0f
,
0x89
,
0x5a
,
0xa3
,
0x3e
,
0x44
,
0x73
,
0x9a
,
0x04
,
0xb1
,
0xe6
,
0x62
,
0x8d
,
0xd1
,
0x43
,
0xd8
,
0xcf
,
0xa2
,
0x69
,
0x42
,
0x99
,
0xec
,
0xdf
,
0x44
,
0x4b
,
0x9a
,
0x04
,
0xb1
,
0xf6
,
0xa2
,
0xc2
,
0xe8
,
0x7f
,
0xd8
,
0xcd
,
0xa2
,
0x79
,
0x53
,
0x3f
,
0xad
,
0x0b
,
0x4f
,
0x81
,
0x24
,
0x7d
,
0x61
,
0x1a
,
0xc7
,
0xa2
,
0xad
,
0x63
,
0xe5
,
0xf4
,
0x42
,
0x99
,
0xdb
,
0x3e
,
0x69
,
0x8b
,
0x9d
,
0x12
,
0x49
,
0xfb
,
0xc2
,
0x34
,
0x8e
,
0x85
,
0xac
,
0x6b
,
0x15
,
0x50
,
0xd0
,
0x77
,
0xf2
,
0x3e
,
0x8d
,
0x92
,
0x91
,
0x88
,
0x0b
,
0xf8
,
0x92
,
0x51
,
0xdd
,
0x19
,
0x15
,
0xf6
,
0x95
,
0x50
,
0xd8
,
0x77
,
0xfc
,
0x2e
,
0x8d
,
0x92
,
0x89
,
0xc8
,
0x0b
,
0x78
,
0xce
,
0xa8
,
0xc3
,
0x51
,
0x58
,
0x0c
,
0x33
,
0x5e
,
0x46
,
0x93
,
0x62
,
0xf6
,
0x8a
,
0x4d
,
0x4e
,
0xb7
,
0x48
,
0x59
,
0x56
,
0xc6
,
0x70
,
0x18
,
0x96
,
0x97
,
0x99
,
0xe6
,
0xd1
,
0xac
,
0xbc
,
0x7b
,
0x23
,
0x26
,
0x6f
,
0xb7
,
0x7e
,
0xe2
,
0x16
,
0x51
,
0xcf
,
0xf8
,
0xb7
,
0x01
,
0x2d
,
0xb9
,
0xba
,
0xd8
,
0x24
,
0xa1
,
0x21
,
0xa7
,
0x4a
,
0x59
,
0xd1
,
0xe2
,
0x0e
,
0x51
,
0x6b
,
0xfc
,
0xc3
,
0x80
,
0x8e
,
0x2c
,
0x5d
,
0x54
,
0x92
,
0xd0
,
0x13
,
0xf4
,
0x02
,
0x9a
,
0x54
,
0x9f
,
0x54
,
0x95
,
0x39
,
0xec
,
0xb5
,
0xab
,
0x87
,
0x26
,
0x9b
,
0x80
,
0x90
,
0xd3
,
0x19
,
0x7a
,
0x0e
,
0x36
,
0xd5
,
0x2d
,
0x55
,
0x34
,
0x07
,
0xc3
,
0x6e
,
0xb3
,
0xd1
,
0x64
,
0x3b
,
0x7d
,
0xcd
,
0xbb
,
0x7d
,
0xdd
,
0x2f
,
0x60
,
0x29
,
0x76
,
0xc5
,
0x56
,
0x1f
,
0xe8
,
0xea
,
0x72
,
0x9d
,
0xf0
,
0x97
,
0xae
,
0xb9
,
0x45
,
0xf7
,
0x21
,
0x58
,
0x79
,
0xa6
,
0x6a
,
0x94
,
0x64
,
0xb6
,
0x22
,
0x43
,
0x50
,
0xe3
,
0x36
,
0x87
,
0x9b
,
0xab
,
0x99
,
0xe5
,
0xab
,
0xb5
,
0xc1
,
0x8c
,
0x16
,
0x82
,
0x19
,
0x93
,
0x9a
,
0x44
,
0x85
,
0xf1
,
0x27
,
0xb0
,
0x94
,
0xf9
,
0xa2
,
0xe8
,
0x5b
,
0x7a
,
0x77
,
0xb1
,
0xf6
,
0x69
,
0x12
,
0x4f
,
0xeb
,
0xf9
,
0xad
,
0xd2
,
0xfc
,
0xaf
,
0xc1
,
0x26
,
0x34
,
0x98
,
0xac
,
0x24
,
0x21
,
0x4f
,
0xc3
,
0x75
,
0x53
,
0xcd
,
0x7a
,
0x53
,
0xbb
,
0x60
,
0x46
,
0x2b
,
0x45
,
0x6a
,
0x13
,
0xb1
,
0xaa
,
0xf7
,
0xe0
,
0x02
,
0xff
,
0x84
,
0xe3
,
0x8f
,
0xc1
,
0x32
,
0x09
,
0x67
,
0x6b
,
0x26
,
0xef
,
0xb9
,
0xf8
,
0xca
,
0xb3
,
0x6a
,
0xe5
,
0xbd
,
0x02
,
0x87
,
0xd0
,
0x60
,
0x76
,
0x27
,
0xfd
,
0xba
,
0x87
,
0x55
,
0xf8
,
0x13
,
0x68
,
0x65
,
0x3a
,
0xb5
,
0xb4
,
0x79
,
0xd5
,
0x28
,
0x57
,
0x2e
,
0x76
,
0x2c
,
0x2e
,
0xac
,
0x61
,
0x3b
,
0x1c
,
0xbd
,
0x0f
,
0xf2
,
0x24
,
0x5c
,
0x54
,
0x46
,
0xdf
,
0xd3
,
0x97
,
0xc7
,
0xd0
,
0xc9
,
0xf4
,
0xef
,
0x8f
,
0x09
,
0x07
,
0xc3
,
0x79
,
0xc0
,
0x6f
,
0x52
,
0x16
,
0xa3
,
0x1e
,
0x1c
,
0x68
,
0x25
,
0xa2
,
0xd1
,
0x9a
,
0x31
,
0xcd
,
0x60
,
0xbd
,
0xe4
,
0x62
,
0x00
,
0x34
,
0x1c
,
0xfe
,
0x32
,
0x61
,
0xff
,
0x6a
,
0x13
,
0xd5
,
0x73
,
0xeb
,
0xbd
,
0x75
,
0xb7
,
0x26
,
0xc1
,
0x35
,
0xf4
,
0x12
,
0x2c
,
0x29
,
0x7c
,
0x64
,
0x19
,
0xf0
,
0x9b
,
0x94
,
0xc5
,
0x68
,
0x08
,
0xfb
,
0x7a
,
0x50
,
0xd1
,
0xb1
,
0xd2
,
0xdc
,
0x78
,
0xd6
,
0x2b
,
0x4f
,
0xe9
,
0x1d
,
0x70
,
0x3b
,
0x95
,
0x0a
,
0xb9
,
0xb4
,
0x45
,
0xc2
,
0x73
,
0x80
,
0x71
,
0xc2
,
0xfd
,
0x8d
,
0x9b
,
0xe0
,
0x16
,
0x7a
,
0x01
,
0x96
,
0x7c
,
0x17
,
0xc8
,
0x51
,
0x3b
,
0xb5
,
0x27
,
0xd2
,
0x74
,
0x1b
,
0xc8
,
0x0b
,
0x4a
,
0x35
,
0xef
,
0x28
,
0xfe
,
0x16
,
0x8e
,
0xca
,
0xfa
,
0x46
,
0x8e
,
0x8a
,
0xef
,
0x35
,
0x18
,
0x8a
,
0xc9
,
0x17
,
0x07
,
0x9e
,
0x01
,
0x4c
,
0x13
,
0xa6
,
0x65
,
0xa0
,
0x20
,
0x94
,
0xd8
,
0x21
,
0xf9
,
0x1d
,
0xb9
,
0xe7
,
0xd0
,
0xaa
,
0x48
,
0x14
,
0x3d
,
0x52
,
0x21
,
0xbb
,
0x64
,
0xeb
,
0xc3
,
0xbe
,
0x85
,
0xfc
,
0x0d
,
0x1c
,
0xd6
,
0xc7
,
0x1f
,
0xb9
,
0x2a
,
0x63
,
0xcb
,
0x8b
,
0xd8
,
0x72
,
0x22
,
0xe5
,
0xaa
,
0x08
,
0x10
,
0xd7
,
0xce
,
0x0c
,
0xd1
,
0xbf
,
0xb9
,
0x3e
,
0x2b
,
0x7a
,
0x50
,
0xec
,
0xf6
,
0x0c
,
0x3a
,
0x8d
,
0x09
,
0x46
,
0x0f
,
0x54
,
0xca
,
0xb6
,
0xa9
,
0xee
,
0xa3
,
0x6a
,
0x56
,
0xaa
,
0x53
,
0x3d
,
0xb3
,
0x9b
,
0x13
,
0xb5
,
0x75
,
0x45
,
0x5c
,
0xfb
,
0xba
,
0xaf
,
0xfe
,
0x01
,
0x5f
,
0xfd
,
0xf9
,
0xc4
,
0xad
,
0x53
,
0x43
,
0xe8
,
0xdb
,
0x55
,
0x5b
,
0xd1
,
0x7f
,
0x65
,
0x3d
,
0xcd
,
0x36
,
0xf7
,
0x0b
,
0x00
,
0x00
,
0xff
,
0xff
,
0x91
,
0x07
,
0xf4
,
0xa6
,
0x17
,
0x05
,
0x00
,
0x00
,
0x0b
,
0xa3
,
0x36
,
0xba
,
0x88
,
0x5b
,
0x9f
,
0x77
,
0xd5
,
0x1f
,
0xe4
,
0xcb
,
0x3f
,
0x01
,
0x00
,
0x00
,
0xff
,
0xff
,
0xff
,
0xc7
,
0x56
,
0xf4
,
0x36
,
0x05
,
0x00
,
0x00
,
}
}
dfssp/api/gRPCServices.proto
View file @
d8ee0857
...
@@ -74,14 +74,15 @@ message JoinSignatureRequest {
...
@@ -74,14 +74,15 @@ message JoinSignatureRequest {
message
UserConnected
{
message
UserConnected
{
ErrorCode
errorCode
=
1
;
ErrorCode
errorCode
=
1
;
string
contractUuid
=
2
;
string
contractUuid
=
2
;
message
User
{
User
user
=
3
;
bytes
KeyHash
=
1
;
string
email
=
2
;
string
ip
=
3
;
uint32
port
=
4
;
}
}
}
message
User
{
bytes
keyHash
=
1
;
string
email
=
2
;
string
ip
=
3
;
uint32
port
=
4
;
}
// ReadySignRequest contains the contract unique identitier that is ready to be signed
// ReadySignRequest contains the contract unique identitier that is ready to be signed
message
ReadySignRequest
{
message
ReadySignRequest
{
string
contractUuid
=
1
;
string
contractUuid
=
1
;
...
...
dfssp/contract/contract_test.go
View file @
d8ee0857
...
@@ -113,10 +113,9 @@ func TestInsertContract(t *testing.T) {
...
@@ -113,10 +113,9 @@ func TestInsertContract(t *testing.T) {
// Insert some contracts with missing user and test waiting contracts for this user
// Insert some contracts with missing user and test waiting contracts for this user
func
TestGetWaitingForUser
(
t
*
testing
.
T
)
{
func
TestGetWaitingForUser
(
t
*
testing
.
T
)
{
knownID
:=
bson
.
NewObjectId
()
knownID
:=
bson
.
NewObjectId
()
dropDataset
()
dropDataset
()
c1
:=
entities
.
NewContract
()
c1
:=
entities
.
NewContract
()
c1
.
AddSigner
(
nil
,
"mail1"
,
[]
byte
{})
c1
.
AddSigner
(
nil
,
"mail1"
,
[]
byte
{})
c1
.
Ready
=
false
c1
.
Ready
=
false
...
@@ -139,3 +138,22 @@ func TestGetWaitingForUser(t *testing.T) {
...
@@ -139,3 +138,22 @@ func TestGetWaitingForUser(t *testing.T) {
assert
.
Equal
(
t
,
nil
,
err
)
assert
.
Equal
(
t
,
nil
,
err
)
assert
.
Equal
(
t
,
2
,
len
(
contracts
))
assert
.
Equal
(
t
,
2
,
len
(
contracts
))
}
}
func
TestCheckAuthorization
(
t
*
testing
.
T
)
{
dropDataset
()
createDataset
()
id
:=
addTestContract
()
assert
.
T
(
t
,
repository
.
CheckAuthorization
(
user1
.
CertHash
,
id
))
assert
.
T
(
t
,
!
repository
.
CheckAuthorization
(
user1
.
CertHash
,
bson
.
NewObjectId
()))
assert
.
T
(
t
,
!
repository
.
CheckAuthorization
(
user2
.
CertHash
,
id
))
assert
.
T
(
t
,
!
repository
.
CheckAuthorization
(
user2
.
CertHash
,
bson
.
NewObjectId
()))
contract
:=
entities
.
Contract
{}
_
=
repository
.
Collection
.
FindByID
(
entities
.
Contract
{
ID
:
id
},
&
contract
)
contract
.
Ready
=
false
_
,
_
=
repository
.
Collection
.
UpdateByID
(
contract
)
// Not valid if contract is not ready
assert
.
T
(
t
,
!
repository
.
CheckAuthorization
(
user1
.
CertHash
,
id
))
}
dfssp/contract/create_test.go
View file @
d8ee0857
...
@@ -2,6 +2,7 @@ package contract_test
...
@@ -2,6 +2,7 @@ package contract_test
import
(
import
(
"crypto/sha512"
"crypto/sha512"
"fmt"
"io/ioutil"
"io/ioutil"
"path/filepath"
"path/filepath"
"testing"
"testing"
...
@@ -27,7 +28,7 @@ func createDataset() {
...
@@ -27,7 +28,7 @@ func createDataset() {
user1
.
Email
=
"user1@example.com"
user1
.
Email
=
"user1@example.com"
user1
.
Expiration
=
time
.
Now
()
.
AddDate
(
1
,
0
,
0
)
user1
.
Expiration
=
time
.
Now
()
.
AddDate
(
1
,
0
,
0
)
user1
.
Certificate
=
"Certificate1"
user1
.
Certificate
=
"Certificate1"
user1
.
CertHash
=
[]
byte
{
0x01
}
_
,
_
=
fmt
.
Sscanf
(
"23a012afa19d5892f66ae9681afb3bb010e61c8bb4afdedd6a407fa40dbb7d4d1ad94953ca25866b6b07e25f8bf604cc94b13fb9dc1e7fa53980040db2a7f787"
,
"%x"
,
&
user1
.
CertHash
)
user2
.
Email
=
"user2@example.com"
user2
.
Email
=
"user2@example.com"
user2
.
Expiration
=
time
.
Now
()
.
AddDate
(
1
,
0
,
0
)
user2
.
Expiration
=
time
.
Now
()
.
AddDate
(
1
,
0
,
0
)
...
...
dfssp/contract/starter.go
0 → 100644
View file @
d8ee0857
package
contract
import
(
n
"net"
"dfss/auth"
"dfss/dfssp/api"
"dfss/dfssp/common"
"dfss/dfssp/entities"
"dfss/mgdb"
"dfss/net"
"gopkg.in/mgo.v2/bson"
)
// JoinSignature allows a client to wait for other clients connections on a specific contract.
// Firstly, every client present BEFORE the call of this function is sent to the stream.
// Then, client information is sent to the stream as it's available.
//
// Please note that the current user will also receive it's own information.
// There is no timeout, this function will shut down on stream disconnection or on error.
func
JoinSignature
(
db
*
mgdb
.
MongoManager
,
rooms
*
common
.
WaitingGroupMap
,
in
*
api
.
JoinSignatureRequest
,
stream
api
.
Platform_JoinSignatureServer
)
{
repository
:=
entities
.
NewContractRepository
(
db
.
Get
(
"contracts"
))
ctx
:=
stream
.
Context
()
state
,
addr
,
_
:=
net
.
GetTLSState
(
&
ctx
)
hash
:=
auth
.
GetCertificateHash
(
state
.
VerifiedChains
[
0
][
0
])
if
!
bson
.
IsObjectIdHex
(
in
.
ContractUuid
)
{
_
=
stream
.
Send
(
&
api
.
UserConnected
{
ErrorCode
:
&
api
.
ErrorCode
{
Code
:
api
.
ErrorCode_INVARG
,
Message
:
"invalid contract uuid"
,
},
})
return
}
if
!
repository
.
CheckAuthorization
(
hash
,
bson
.
ObjectIdHex
(
in
.
ContractUuid
))
{
_
=
stream
.
Send
(
&
api
.
UserConnected
{
ErrorCode
:
&
api
.
ErrorCode
{
Code
:
api
.
ErrorCode_INVARG
,
Message
:
"unauthorized signature"
,
},
})
return
}
// Join room
roomID
:=
"contract_"
+
in
.
ContractUuid
channel
,
pendingSigners
:=
rooms
.
Join
(
roomID
)
// Send pendingSigners
for
_
,
p
:=
range
pendingSigners
{
err
:=
sendUserToStream
(
&
stream
,
in
.
ContractUuid
,
p
.
(
*
api
.
User
))
if
err
!=
nil
{
rooms
.
Unjoin
(
roomID
,
channel
)
return
}
}
// Broadcast self identity
host
,
_
,
_
:=
n
.
SplitHostPort
(
addr
.
String
())
rooms
.
Broadcast
(
roomID
,
&
api
.
User
{
KeyHash
:
hash
,
Email
:
net
.
GetCN
(
&
ctx
),
Ip
:
host
,
Port
:
in
.
Port
,
})
// Listen for others
for
{
select
{
case
user
,
ok
:=
<-
channel
:
if
!
ok
{
// channel is closed, means that the room is closed
return
}
err
:=
sendUserToStream
(
&
stream
,
in
.
ContractUuid
,
user
.
(
*
api
.
User
))
if
err
!=
nil
{
rooms
.
Unjoin
(
roomID
,
channel
)
return
}
case
<-
ctx
.
Done
()
:
rooms
.
Unjoin
(
roomID
,
channel
)
return
}
}
}
func
sendUserToStream
(
stream
*
api
.
Platform_JoinSignatureServer
,
contractUUID
string
,
user
*
api
.
User
)
error
{
return
(
*
stream
)
.
Send
(
&
api
.
UserConnected
{
ErrorCode
:
&
api
.
ErrorCode
{
Code
:
api
.
ErrorCode_SUCCESS
},
ContractUuid
:
contractUUID
,
User
:
user
,
})
}
dfssp/contract/starter_test.go
0 → 100644
View file @
d8ee0857
package
contract_test
import
(
"testing"
"dfss/dfssp/api"
"dfss/dfssp/entities"
"github.com/bmizerany/assert"
"golang.org/x/net/context"
"gopkg.in/mgo.v2/bson"
)
func
addTestContract
()
bson
.
ObjectId
{
contract
:=
entities
.
NewContract
()
contract
.
AddSigner
(
&
user1
.
ID
,
user1
.
Email
,
user1
.
CertHash
)
contract
.
Ready
=
true
_
,
_
=
manager
.
Get
(
"contracts"
)
.
Insert
(
contract
)
return
contract
.
ID
}
func
TestJoinSignature
(
t
*
testing
.
T
)
{
dropDataset
()
createDataset
()
contractID
:=
addTestContract
()
client
:=
clientTest
(
t
)
stream
,
err
:=
client
.
JoinSignature
(
context
.
Background
(),
&
api
.
JoinSignatureRequest
{
ContractUuid
:
contractID
.
Hex
(),
Port
:
5050
,
})
assert
.
Equal
(
t
,
nil
,
err
)
user
,
err
:=
stream
.
Recv
()
assert
.
Equal
(
t
,
nil
,
err
)
assert
.
Equal
(
t
,
""
,
user
.
ErrorCode
.
Message
)
assert
.
Equal
(
t
,
api
.
ErrorCode_SUCCESS
,
user
.
ErrorCode
.
Code
)
assert
.
Equal
(
t
,
contractID
.
Hex
(),
user
.
ContractUuid
)
assert
.
Equal
(
t
,
"test@test.com"
,
user
.
User
.
Email
)
assert
.
Equal
(
t
,
"127.0.0.1"
,
user
.
User
.
Ip
)
assert
.
Equal
(
t
,
uint32
(
5050
),
user
.
User
.
Port
)
}
func
TestJoinSignatureBadContract
(
t
*
testing
.
T
)
{
dropDataset
()
createDataset
()
client
:=
clientTest
(
t
)
stream
,
err
:=
client
.
JoinSignature
(
context
.
Background
(),
&
api
.
JoinSignatureRequest
{
ContractUuid
:
bson
.
NewObjectId
()
.
Hex
(),
Port
:
5050
,
})
assert
.
Equal
(
t
,
nil
,
err
)
user
,
err
:=
stream
.
Recv
()
assert
.
Equal
(
t
,
nil
,
err
)
assert
.
Equal
(
t
,
"unauthorized signature"
,
user
.
ErrorCode
.
Message
)
assert
.
Equal
(
t
,
api
.
ErrorCode_INVARG
,
user
.
ErrorCode
.
Code
)
}
dfssp/entities/contract.go
View file @
d8ee0857
...
@@ -83,3 +83,17 @@ func (r *ContractRepository) GetWaitingForUser(email string) ([]Contract, error)
...
@@ -83,3 +83,17 @@ func (r *ContractRepository) GetWaitingForUser(email string) ([]Contract, error)
},
&
res
)
},
&
res
)
return
res
,
err
return
res
,
err
}
}
// CheckAuthorization checks that a client is allowed to sign a specific contract
func
(
r
*
ContractRepository
)
CheckAuthorization
(
signerHash
[]
byte
,
contractID
bson
.
ObjectId
)
bool
{
count
,
_
:=
r
.
Collection
.
Collection
.
Find
(
bson
.
M
{
"_id"
:
contractID
,
"ready"
:
true
,
"signers"
:
bson
.
M
{
"$elemMatch"
:
bson
.
M
{
"hash"
:
signerHash
},
},
})
.
Count
()
return
count
==
1
}
dfssp/server/server.go
View file @
d8ee0857
...
@@ -6,6 +6,7 @@ import (
...
@@ -6,6 +6,7 @@ import (
"dfss/dfssp/api"
"dfss/dfssp/api"
"dfss/dfssp/authority"
"dfss/dfssp/authority"
"dfss/dfssp/common"
"dfss/dfssp/contract"
"dfss/dfssp/contract"
"dfss/dfssp/user"
"dfss/dfssp/user"
"dfss/mgdb"
"dfss/mgdb"
...
@@ -17,6 +18,7 @@ import (
...
@@ -17,6 +18,7 @@ import (
type
platformServer
struct
{
type
platformServer
struct
{
Pid
*
authority
.
PlatformID
Pid
*
authority
.
PlatformID
DB
*
mgdb
.
MongoManager
DB
*
mgdb
.
MongoManager
Rooms
*
common
.
WaitingGroupMap
CertDuration
int
CertDuration
int
Verbose
bool
Verbose
bool
}
}
...
@@ -61,7 +63,17 @@ func (s *platformServer) PostContract(ctx context.Context, in *api.PostContractR
...
@@ -61,7 +63,17 @@ func (s *platformServer) PostContract(ctx context.Context, in *api.PostContractR
//
//
// Handle incoming JoinSignatureRequest messages
// Handle incoming JoinSignatureRequest messages
func
(
s
*
platformServer
)
JoinSignature
(
in
*
api
.
JoinSignatureRequest
,
stream
api
.
Platform_JoinSignatureServer
)
error
{
func
(
s
*
platformServer
)
JoinSignature
(
in
*
api
.
JoinSignatureRequest
,
stream
api
.
Platform_JoinSignatureServer
)
error
{
// TODO
ctx
:=
stream
.
Context
()
cn
:=
net
.
GetCN
(
&
ctx
)
if
len
(
cn
)
==
0
{
_
=
stream
.
Send
(
&
api
.
UserConnected
{
ErrorCode
:
&
api
.
ErrorCode
{
Code
:
api
.
ErrorCode_BADAUTH
},
})
return
nil
}
contract
.
JoinSignature
(
s
.
DB
,
s
.
Rooms
,
in
,
stream
)
return
nil
return
nil
}
}
...
@@ -91,6 +103,7 @@ func GetServer(keyPath, db string, certValidity int, verbose bool) *grpc.Server
...
@@ -91,6 +103,7 @@ func GetServer(keyPath, db string, certValidity int, verbose bool) *grpc.Server
api
.
RegisterPlatformServer
(
server
,
&
platformServer
{
api
.
RegisterPlatformServer
(
server
,
&
platformServer
{
Pid
:
pid
,
Pid
:
pid
,
DB
:
dbManager
,
DB
:
dbManager
,
Rooms
:
common
.
NewWaitingGroupMap
(),
CertDuration
:
certValidity
,
CertDuration
:
certValidity
,
Verbose
:
verbose
,
Verbose
:
verbose
,
})
})
...
...
net/server.go
View file @
d8ee0857
...
@@ -56,18 +56,18 @@ func Listen(addrPort string, grpcServer *grpc.Server) error {
...
@@ -56,18 +56,18 @@ func Listen(addrPort string, grpcServer *grpc.Server) error {
// GetTLSState returns the current tls connection state from a grpc context.
// GetTLSState returns the current tls connection state from a grpc context.
// If you just need to check that the connected peer provides its certificate, use `GetCN`.
// If you just need to check that the connected peer provides its certificate, use `GetCN`.
func
GetTLSState
(
ctx
*
context
.
Context
)
(
tls
.
ConnectionState
,
bool
)
{
func
GetTLSState
(
ctx
*
context
.
Context
)
(
tls
.
ConnectionState
,
net
.
Addr
,
bool
)
{
p
,
ok
:=
peer
.
FromContext
(
*
ctx
)
p
,
ok
:=
peer
.
FromContext
(
*
ctx
)
if
!
ok
{
if
!
ok
{
return
tls
.
ConnectionState
{},
false
return
tls
.
ConnectionState
{},
nil
,
false
}
}
return
p
.
AuthInfo
.
(
credentials
.
TLSInfo
)
.
State
,
true
return
p
.
AuthInfo
.
(
credentials
.
TLSInfo
)
.
State
,
p
.
Addr
,
true
}
}
// GetCN returns the current common name of connected peer from grpc context.
// GetCN returns the current common name of connected peer from grpc context.
// The returned string is empty if encountering a non-auth peer.
// The returned string is empty if encountering a non-auth peer.
func
GetCN
(
ctx
*
context
.
Context
)
string
{
func
GetCN
(
ctx
*
context
.
Context
)
string
{
state
,
ok
:=
GetTLSState
(
ctx
)
state
,
_
,
ok
:=
GetTLSState
(
ctx
)
if
!
ok
||
len
(
state
.
VerifiedChains
)
==
0
{
if
!
ok
||
len
(
state
.
VerifiedChains
)
==
0
{
return
""
return
""
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment