Skip to content

Commit 8cf0239

Browse files
authored
update to go code organization (#220)
* update to go code organization * update to use interfaces exclusively to interact with okapi Co-authored-by: Seth Back <[email protected]>
1 parent 68a4234 commit 8cf0239

10 files changed

Lines changed: 123 additions & 74 deletions

File tree

go/go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ replace github.com/trinsic-id/okapi/go => ./
66

77
require (
88
github.com/btcsuite/btcutil v1.0.2
9-
github.com/golang/protobuf v1.4.3
109
github.com/stretchr/testify v1.7.0
1110
google.golang.org/protobuf v1.25.0
1211
)

go/go.sum

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
2929
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
3030
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
3131
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
32-
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
33-
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
3432
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
3533
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
3634
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -92,7 +90,6 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ
9290
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
9391
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
9492
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
95-
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
9693
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
9794
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
9895
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=

go/okapi/DidComm.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,39 @@ import (
44
okapi "github.com/trinsic-id/okapi/go/okapi/proto"
55
)
66

7-
type DidComm struct{}
87
type DidCommer interface {
98
Pack(request *okapi.PackRequest) (*okapi.PackResponse, error)
109
Unpack(request *okapi.UnpackRequest) (*okapi.UnpackResponse, error)
1110
Sign(request *okapi.SignRequest) (*okapi.SignResponse, error)
1211
Verify(request *okapi.VerifyRequest) (*okapi.VerifyResponse, error)
1312
}
1413

15-
func (d DidComm) Pack(request *okapi.PackRequest) (*okapi.PackResponse, error) {
14+
func DidComm() DidCommer {
15+
return &didComm{}
16+
}
17+
18+
type didComm struct{}
19+
20+
func (d *didComm) Pack(request *okapi.PackRequest) (*okapi.PackResponse, error) {
1621
response := okapi.PackResponse{}
1722
err := callOkapiNative(request, &response, didcommPack)
1823
return &response, err
1924
}
2025

21-
func (d DidComm) Unpack(request *okapi.UnpackRequest) (*okapi.UnpackResponse, error) {
26+
func (d *didComm) Unpack(request *okapi.UnpackRequest) (*okapi.UnpackResponse, error) {
2227
response := okapi.UnpackResponse{}
2328
err := callOkapiNative(request, &response, didcommUnpack)
2429
return &response, err
2530
}
2631

27-
func (d DidComm) Sign(request *okapi.SignRequest) (*okapi.SignResponse, error) {
32+
func (d *didComm) Sign(request *okapi.SignRequest) (*okapi.SignResponse, error) {
2833
response := okapi.SignResponse{}
2934
err := callOkapiNative(request, &response, didcommSign)
3035
return &response, err
3136
}
3237

33-
func (d DidComm) Verify(request *okapi.VerifyRequest) (*okapi.VerifyResponse, error) {
38+
func (d *didComm) Verify(request *okapi.VerifyRequest) (*okapi.VerifyResponse, error) {
3439
response := okapi.VerifyResponse{}
3540
err := callOkapiNative(request, &response, didcommVerify)
3641
return &response, err
37-
}
42+
}

go/okapi/DidKey.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,27 @@ import (
44
okapi "github.com/trinsic-id/okapi/go/okapi/proto"
55
)
66

7-
type DidKey struct {}
7+
// DidKeyer is the interface that groups the did:key functions
88
type DidKeyer interface {
99
Generate(request *okapi.GenerateKeyRequest) (*okapi.GenerateKeyResponse, error)
1010
Resolve(request *okapi.ResolveRequest) (*okapi.ResolveResponse, error)
1111
}
1212

13-
func (d DidKey) Generate(request *okapi.GenerateKeyRequest) (*okapi.GenerateKeyResponse, error) {
13+
// DidKey returns a DidKeyer that can generate and resolve did:keys
14+
func DidKey() DidKeyer {
15+
return &didKey{}
16+
}
17+
18+
type didKey struct{}
19+
20+
func (d *didKey) Generate(request *okapi.GenerateKeyRequest) (*okapi.GenerateKeyResponse, error) {
1421
response := okapi.GenerateKeyResponse{}
1522
err := callOkapiNative(request, &response, didkeyGenerate)
1623
return &response, err
1724
}
1825

19-
func (d DidKey) Resolve(request *okapi.ResolveRequest) (*okapi.ResolveResponse, error) {
26+
func (d *didKey) Resolve(request *okapi.ResolveRequest) (*okapi.ResolveResponse, error) {
2027
response := okapi.ResolveResponse{}
2128
err := callOkapiNative(request, &response, didkeyResolve)
2229
return &response, err
23-
}
30+
}

go/okapi/LdProofs.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,25 @@ import (
44
okapi "github.com/trinsic-id/okapi/go/okapi/proto"
55
)
66

7-
type LdProofs struct {}
87
type LdProofer interface {
98
CreateProof(request *okapi.CreateProofRequest) (*okapi.CreateProofResponse, error)
109
VerifyProof(request *okapi.VerifyProofRequest) (*okapi.VerifyProofResponse, error)
1110
}
1211

13-
func (l LdProofs) CreateProof(request *okapi.CreateProofRequest) (*okapi.CreateProofResponse, error) {
12+
func LdProofs() LdProofer {
13+
return &ldProofs{}
14+
}
15+
16+
type ldProofs struct{}
17+
18+
func (l *ldProofs) CreateProof(request *okapi.CreateProofRequest) (*okapi.CreateProofResponse, error) {
1419
response := okapi.CreateProofResponse{}
1520
err := callOkapiNative(request, &response, ldproofsCreateProof)
1621
return &response, err
1722
}
1823

19-
func (l LdProofs) VerifyProof(request *okapi.VerifyProofRequest) (*okapi.VerifyProofResponse, error) {
24+
func (l *ldProofs) VerifyProof(request *okapi.VerifyProofRequest) (*okapi.VerifyProofResponse, error) {
2025
response := okapi.VerifyProofResponse{}
2126
err := callOkapiNative(request, &response, ldproofsVerifyProof)
2227
return &response, err
23-
}
28+
}

go/okapi/Oberon.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package okapi
22

33
import okapi "github.com/trinsic-id/okapi/go/okapi/proto"
44

5-
type Oberon struct{}
65
type Oberoner interface {
76
CreateKey(request *okapi.CreateOberonKeyRequest) (*okapi.CreateOberonKeyResponse, error)
87
CreateToken(request *okapi.CreateOberonTokenRequest) (*okapi.CreateOberonTokenResponse, error)
@@ -12,37 +11,43 @@ type Oberoner interface {
1211
VerifyProof(request *okapi.VerifyOberonProofRequest) (*okapi.VerifyOberonProofResponse, error)
1312
}
1413

15-
func (d Oberon) CreateKey(request *okapi.CreateOberonKeyRequest) (*okapi.CreateOberonKeyResponse, error) {
14+
func Oberon() Oberoner {
15+
return &oberon{}
16+
}
17+
18+
type oberon struct{}
19+
20+
func (d *oberon) CreateKey(request *okapi.CreateOberonKeyRequest) (*okapi.CreateOberonKeyResponse, error) {
1621
response := okapi.CreateOberonKeyResponse{}
1722
err := callOkapiNative(request, &response, oberonCreateKey)
1823
return &response, err
1924
}
2025

21-
func (d Oberon) CreateToken(request *okapi.CreateOberonTokenRequest) (*okapi.CreateOberonTokenResponse, error) {
26+
func (d *oberon) CreateToken(request *okapi.CreateOberonTokenRequest) (*okapi.CreateOberonTokenResponse, error) {
2227
response := okapi.CreateOberonTokenResponse{}
2328
err := callOkapiNative(request, &response, oberonCreateToken)
2429
return &response, err
2530
}
2631

27-
func (d Oberon) BlindToken(request *okapi.BlindOberonTokenRequest) (*okapi.BlindOberonTokenResponse, error) {
32+
func (d *oberon) BlindToken(request *okapi.BlindOberonTokenRequest) (*okapi.BlindOberonTokenResponse, error) {
2833
response := okapi.BlindOberonTokenResponse{}
2934
err := callOkapiNative(request, &response, oberonBlindToken)
3035
return &response, err
3136
}
3237

33-
func (d Oberon) UnBlindToken(request *okapi.UnBlindOberonTokenRequest) (*okapi.UnBlindOberonTokenResponse, error) {
38+
func (d *oberon) UnblindToken(request *okapi.UnBlindOberonTokenRequest) (*okapi.UnBlindOberonTokenResponse, error) {
3439
response := okapi.UnBlindOberonTokenResponse{}
3540
err := callOkapiNative(request, &response, oberonUnBlindToken)
3641
return &response, err
3742
}
3843

39-
func (d Oberon) CreateProof(request *okapi.CreateOberonProofRequest) (*okapi.CreateOberonProofResponse, error) {
44+
func (d *oberon) CreateProof(request *okapi.CreateOberonProofRequest) (*okapi.CreateOberonProofResponse, error) {
4045
response := okapi.CreateOberonProofResponse{}
4146
err := callOkapiNative(request, &response, oberonCreateProof)
4247
return &response, err
4348
}
4449

45-
func (d Oberon) VerifyProof(request *okapi.VerifyOberonProofRequest) (*okapi.VerifyOberonProofResponse, error) {
50+
func (d *oberon) VerifyProof(request *okapi.VerifyOberonProofRequest) (*okapi.VerifyOberonProofResponse, error) {
4651
response := okapi.VerifyOberonProofResponse{}
4752
err := callOkapiNative(request, &response, oberonVerifyProof)
4853
return &response, err

go/okapi/didkey_test.go

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/base64"
55
"encoding/hex"
66
"fmt"
7+
78
"github.com/btcsuite/btcutil/base58"
89
"github.com/stretchr/testify/assert"
910
okapi "github.com/trinsic-id/okapi/go/okapi/proto"
@@ -12,64 +13,79 @@ import (
1213
)
1314

1415
func TestGenerateKey(t *testing.T) {
16+
assert := assert.New(t)
17+
dk := DidKey()
18+
1519
request := okapi.GenerateKeyRequest{}
1620
request.KeyType = okapi.KeyType_KEY_TYPE_ED25519
1721
request.Seed = []byte{1, 2, 3}
1822

19-
response, err := DidKey{}.Generate(&request)
20-
assert.Nil(t, err)
21-
assert.NotNil(t, &response)
23+
response, err := dk.Generate(&request)
24+
assert.Nil(err)
25+
assert.NotNil(response)
2226
assertValidKeyGenerated(t, response)
2327
}
2428

2529
func TestGenerateKeyNoSeed(t *testing.T) {
30+
dk := DidKey()
31+
2632
request := okapi.GenerateKeyRequest{}
2733
request.KeyType = okapi.KeyType_KEY_TYPE_ED25519
28-
response, err := DidKey{}.Generate(&request)
34+
35+
response, err := dk.Generate(&request)
2936
assert.Nil(t, err)
3037
assertValidKeyGenerated(t, response)
3138
}
3239

3340
func TestResolveKey(t *testing.T) {
41+
dk := DidKey()
42+
3443
key := "did:key:z6Mkt6QT8FPajKXDrtMefkjxRQENd9wFzKkDFomdQAVFzpzm#z6LSfDq6DuofPeZUqNEmdZsxpvfHvSoUXGEWFhw7JHk4cynN"
3544
request := &okapi.ResolveRequest{}
3645
request.Did = key
37-
response, err := DidKey{}.Resolve(request)
46+
47+
response, err := dk.Resolve(request)
3848
assert.Nil(t, err)
3949
assert.NotNil(t, &response)
4050
}
4151

4252
func TestGenerateKeyThrowsInvalidKeyType(t *testing.T) {
53+
dk := DidKey()
54+
4355
request := okapi.GenerateKeyRequest{}
4456
request.KeyType = -1
45-
_, err := DidKey{}.Generate(&request)
57+
58+
_, err := dk.Generate(&request)
4659
assert.NotNil(t, err)
4760
assert.IsType(t, &DidError{}, err)
4861
}
4962

5063
type DataArgument struct {
5164
keyType okapi.KeyType
5265
keyTypeString string
53-
seed string
54-
response string
66+
seed string
67+
response string
5568
}
5669

5770
func TestGenerateKeyFromSeed(t *testing.T) {
71+
dk := DidKey()
72+
5873
dataArguments := []DataArgument{{keyType: okapi.KeyType_KEY_TYPE_ED25519, keyTypeString: "Ed25519",
5974
seed: "4f66b355aa7b0980ff901f2295b9c562ac3061be4df86703eb28c612faae6578",
6075
response: "6fioC1zcDPyPEL19pXRS2E4iJ46zH7xP6uSgAaPdwDrx"},
6176
{keyType: okapi.KeyType_KEY_TYPE_X25519, keyTypeString: "X25519",
6277
seed: "9b29d42b38ddd52ed39c0ff70b39572a6eb9b3cac201918dc6d6a84b4c88d2a5",
6378
response: "3EK9AYXoUV4Unn5AjvYY39hyK91n7gg4ExC8rKKSUQXJ"},
6479
}
80+
6581
for index, argument := range dataArguments {
6682
t.Run(fmt.Sprintf("Run #%d - KeyType.%s", index+1, argument.keyTypeString), func(t *testing.T) {
6783
hex, err := hex.DecodeString(argument.seed)
6884
if err != nil {
69-
assert.Failf(t,"Failed to decode hex", argument.seed)
85+
assert.Failf(t, "Failed to decode hex", argument.seed)
7086
}
7187
request := okapi.GenerateKeyRequest{KeyType: argument.keyType, Seed: hex}
72-
response, err := DidKey{}.Generate(&request)
88+
response, err := dk.Generate(&request)
7389
assert.Nil(t, err)
7490

7591
pk := assertValidKeyGenerated(t, response, argument.keyTypeString)
@@ -92,6 +108,7 @@ func assertValidKeyGenerated(t *testing.T, response *okapi.GenerateKeyResponse,
92108
publicKey := append(x, y...)
93109
assert.NotNil(t, publicKey)
94110
assert.Equal(t, 32, len(publicKey))
111+
95112
response64, _ := base64.RawURLEncoding.DecodeString(base64Padding(response.Key[0].D))
96113
assert.NotNil(t, response64)
97114
assert.Equal(t, 32, len(response64))
@@ -106,4 +123,4 @@ func base64Padding(data string) string {
106123
data += "="
107124
}
108125
return data
109-
}
126+
}

go/okapi/ldproofs_test.go

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,51 @@
11
package okapi
22

33
import (
4+
"testing"
5+
"time"
6+
47
"github.com/stretchr/testify/assert"
58
okapi "github.com/trinsic-id/okapi/go/okapi/proto"
69
"google.golang.org/protobuf/types/known/structpb"
7-
"log"
8-
"testing"
9-
"time"
1010
)
1111

1212
func TestGenerateCapabilityInvocationProofWithJCS(t *testing.T) {
13+
assert := assert.New(t)
14+
dk := DidKey()
15+
ldp := LdProofs()
16+
1317
proofStruct, err := structpb.NewStruct(map[string]interface{}{
1418
"@context": "https://w3id.org/security/v2",
15-
"target": "urn:trinsic:wallets:noop",
19+
"target": "urn:trinsic:wallets:noop",
1620
"proof": map[string]interface{}{
1721
"created": time.Now().Format(time.RFC3339),
1822
},
1923
})
24+
if !assert.Nil(err) {
25+
return
26+
}
2027

2128
request := okapi.GenerateKeyRequest{KeyType: okapi.KeyType_KEY_TYPE_ED25519}
22-
response, err := DidKey{}.Generate(&request)
23-
if err != nil {
24-
log.Fatalln(err)
29+
response, err := dk.Generate(&request)
30+
if !assert.Nil(err) {
31+
return
2532
}
33+
2634
signingKey := &okapi.JsonWebKey{}
2735
for _, key := range response.Key {
2836
if key.Crv == "Ed25519" {
2937
signingKey = key
3038
break
3139
}
3240
}
33-
signedCapability, err2 := LdProofs{}.CreateProof(&okapi.CreateProofRequest{
41+
signedCapability, err := ldp.CreateProof(&okapi.CreateProofRequest{
3442
Document: proofStruct,
3543
Key: signingKey,
3644
Suite: okapi.LdSuite_LD_SUITE_JCSED25519SIGNATURE2020,
3745
})
38-
if err2 != nil {
39-
log.Fatalln(err2)
46+
if !assert.Nil(err) {
47+
return
4048
}
41-
assert.Nil(t, err2)
42-
assert.NotNil(t, signedCapability)
43-
assert.NotNil(t, signedCapability.SignedDocument)
49+
assert.NotNil(signedCapability)
50+
assert.NotNil(signedCapability.SignedDocument)
4451
}

0 commit comments

Comments
 (0)