Skip to content

Commit 95caa55

Browse files
committed
Refactor public API to be more usable
1 parent 98efd72 commit 95caa55

File tree

4 files changed

+63
-16
lines changed

4 files changed

+63
-16
lines changed

.github/workflows/go.yml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
name: Go
2+
3+
on:
4+
push:
5+
branches: [ master ]
6+
pull_request:
7+
branches: [ master ]
8+
9+
jobs:
10+
11+
test:
12+
name: Test
13+
runs-on: ubuntu-latest
14+
steps:
15+
16+
- name: Set up Go 1.x
17+
uses: actions/setup-go@v2
18+
with:
19+
go-version: ^1.14
20+
21+
- name: Check out code into the Go module directory
22+
uses: actions/checkout@v2
23+
24+
- name: Install dependencies
25+
run: |
26+
go version
27+
go get -u golang.org/x/lint/golint
28+
29+
- name: Run vet & lint
30+
run: |
31+
go vet ./...
32+
golint ./...
33+
34+
- name: Test
35+
run: go test -v -covermode=count -coverprofile=coverage.out ./...
36+
37+
- name: Convert coverage
38+
uses: jandelgado/gcov2lcov-action@v1.0.5
39+
40+
- name: Coveralls
41+
uses: coverallsapp/github-action@v1.1.2
42+
with:
43+
github-token: ${{ secrets.github_token }}
44+
path-to-lcov: coverage.lcov

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Shamir's Secret Sharing
22

3+
[![Go Reference](https://pkg.go.dev/badge/github.com/lafriks/go-shamir.svg)](https://pkg.go.dev/github.com/lafriks/go-shamir)
4+
[![Coverage Status](https://coveralls.io/repos/github/lafriks/go-shamir/badge.svg?branch=master)](https://coveralls.io/github/lafriks/go-shamir?branch=master)
5+
36
Based on [github.com/codahale/sss](https://github.com/codahale/sss)
47

58
A pure Go implementation of [Shamir's Secret Sharing algorithm](http://en.wikipedia.org/wiki/Shamir's_Secret_Sharing)
@@ -25,13 +28,13 @@ func main() {
2528
secret := []byte("example")
2629

2730
// Split secret to 5 shares and require 3 shares to reconstruct secret
28-
shares, err := Split(5, 3, secret)
31+
shares, err := shamir.Split(secret, 5, 3)
2932
if err != nil {
3033
panic(err)
3134
}
3235

3336
// Reconstruct secret from shares
34-
reconstructed, err := Combine([][]byte{shares[0], shares[2], shares[4]})
37+
reconstructed, err := shamir.Combine(shares[0], shares[2], shares[4])
3538
if err != nil {
3639
panic(err)
3740
}

shamir.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ var (
5757

5858
// Split the given secret into N shares of which K are required to recover the
5959
// secret. Returns an array of shares.
60-
func Split(n, k int, secret []byte) ([][]byte, error) {
60+
func Split(secret []byte, n, k int) ([][]byte, error) {
6161
if k <= 1 || k > 255 {
6262
return nil, ErrInvalidThreshold
6363
}
@@ -95,7 +95,7 @@ func Split(n, k int, secret []byte) ([][]byte, error) {
9595
}
9696

9797
// Combine the given shares into the original secret.
98-
func Combine(shares [][]byte) ([]byte, error) {
98+
func Combine(shares ...[]byte) ([]byte, error) {
9999
if len(shares) < 2 || len(shares[0]) < 2 {
100100
return nil, ErrInvalidShares
101101
}

shamir_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
func TestSplit_valid(t *testing.T) {
1010
secret := []byte("example")
1111

12-
shares, err := Split(5, 3, secret)
12+
shares, err := Split(secret, 5, 3)
1313
if err != nil {
1414
t.Fatalf("Unexpected error: %v", err)
1515
}
@@ -28,31 +28,31 @@ func TestSplit_valid(t *testing.T) {
2828
func TestSplit_invalid(t *testing.T) {
2929
secret := []byte("example")
3030

31-
if _, err := Split(5, 0, secret); !errors.Is(err, ErrInvalidThreshold) {
31+
if _, err := Split(secret, 5, 0); !errors.Is(err, ErrInvalidThreshold) {
3232
t.Fatal("Expected ErrInvalidCount")
3333
}
3434

35-
if _, err := Split(0, 3, secret); !errors.Is(err, ErrInvalidCount) {
35+
if _, err := Split(secret, 0, 3); !errors.Is(err, ErrInvalidCount) {
3636
t.Fatal("Expected ErrInvalidCount")
3737
}
3838

39-
if _, err := Split(400, 300, secret); !errors.Is(err, ErrInvalidThreshold) {
39+
if _, err := Split(secret, 400, 300); !errors.Is(err, ErrInvalidThreshold) {
4040
t.Fatal("Expected ErrInvalidCount")
4141
}
4242

43-
if _, err := Split(300, 3, secret); !errors.Is(err, ErrInvalidCount) {
43+
if _, err := Split(secret, 300, 3); !errors.Is(err, ErrInvalidCount) {
4444
t.Fatal("Expected ErrInvalidCount")
4545
}
4646

47-
if _, err := Split(5, 3, nil); !errors.Is(err, ErrEmptySecret) {
47+
if _, err := Split(nil, 5, 3); !errors.Is(err, ErrEmptySecret) {
4848
t.Fatal("Expected ErrEmptySecret")
4949
}
5050
}
5151

5252
func TestCombine_valid(t *testing.T) {
5353
secret := []byte("example")
5454

55-
shares, err := Split(5, 3, secret)
55+
shares, err := Split(secret, 5, 3)
5656
if err != nil {
5757
t.Fatalf("Unexpected error: %v", err)
5858
}
@@ -66,7 +66,7 @@ func TestCombine_valid(t *testing.T) {
6666
if k == i || k == j {
6767
continue
6868
}
69-
reconstructed, err := Combine([][]byte{shares[i], shares[j], shares[k]})
69+
reconstructed, err := Combine(shares[i], shares[j], shares[k])
7070
if err != nil {
7171
t.Fatalf("Unexpected error: %v", err)
7272
}
@@ -84,15 +84,15 @@ func TestCombine_invalid(t *testing.T) {
8484
t.Fatal("Expected ErrInvalidShares")
8585
}
8686

87-
if _, err := Combine([][]byte{[]byte("exam"),[]byte("ple")}); err == nil {
87+
if _, err := Combine([]byte("exam"), []byte("ple")); err == nil {
8888
t.Fatal("Expected ErrInvalidShares")
8989
}
9090

91-
if _, err := Combine([][]byte{[]byte("a"),[]byte("b")}); err == nil {
91+
if _, err := Combine([]byte("a"), []byte("b")); err == nil {
9292
t.Fatal("Expected ErrInvalidShares")
9393
}
9494

95-
if _, err := Combine([][]byte{[]byte("aa"),[]byte("aa")}); err == nil {
95+
if _, err := Combine([]byte("aa"), []byte("aa")); err == nil {
9696
t.Fatal("Expected ErrInvalidShares")
9797
}
98-
}
98+
}

0 commit comments

Comments
 (0)