WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit f1231be

Browse files
committed
travisci fixes. simplify test and remove suppport for go1.6.
1 parent 1578f51 commit f1231be

File tree

3 files changed

+111
-158
lines changed

3 files changed

+111
-158
lines changed

.travis.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
language: go
22

33
go:
4-
- 1.6
54
- 1.7
65
- 1.8
76
- 1.9
87

8+
install: false
9+
910
script:
10-
- go test -v ./...
11+
- go test -v || travis_terminate 1
1112
- go get github.com/mitchellh/gox
1213
- CGO_ENABLED=0 gox -ldflags "-s" -rebuild
1314

README.md

Lines changed: 39 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,50 @@
11
ssh-keydgen [![Travis](https://img.shields.io/travis/cornfeedhobo/ssh-keydgen.svg)]() [![Github All Releases](https://img.shields.io/github/downloads/cornfeedhobo/ssh-keydgen/total.svg)]()
22
===========
33

4-
Generate _Deterministic_ SSH keys
5-
6-
```text
7-
NAME:
8-
ssh-keydgen - Deterministic authentication key generation
9-
10-
USAGE:
11-
ssh-keydgen [-t] [-b] [-c] [-n] [-f] [-a]
12-
13-
AUTHOR:
14-
cornfeedhobo
15-
16-
OPTIONS:
17-
-t type Specifies the type of key to create. The possible values are "dsa", "ecdsa", "rsa", or "ed25519". (default: "ed25519")
18-
-b bits Specifies the number of bits in the key to create. Possible values are restricted by key type. (default: 2048)
19-
-c curve Specifies the elliptic curve to use. The possible values are 256, 384, or 521. (default: 256)
20-
-n factor Specifies the work factor, or "difficulty", applied to the key generation function. (default: 16384)
21-
-f filename Specifies the filename of the key file.
22-
-a Add the generated key to the running ssh-agent.
23-
24-
COPYRIGHT:
25-
(c) 2017 cornfeedhobo
26-
```
4+
Generate _Deterministic_ SSH keys
5+
6+
```text
7+
NAME:
8+
ssh-keydgen - deterministic authentication key generation
9+
10+
USAGE:
11+
ssh-keydgen [-t] [-b] [-c] [-n] [-f] [-a] [-w]
12+
13+
AUTHOR:
14+
cornfeedhobo
15+
16+
OPTIONS:
17+
-t type Specifies the type of key to create. The possible values are "dsa", "ecdsa", "rsa", or "ed25519". (default: "ed25519")
18+
-b bits Specifies the number of bits in the key to create. Possible values are restricted by key type. (default: 2048)
19+
-c curve Specifies the elliptic curve to use. The possible values are 256, 384, or 521. (default: 256)
20+
-n factor Specifies the work factor, or "difficulty", applied to the key generation function. (default: 16384)
21+
-f filename Specifies the filename of the key file.
22+
-a Add the generated key to the running ssh-agent.
23+
-w seed Provides the deterministic seed
24+
25+
COPYRIGHT:
26+
(c) 2018 cornfeedhobo
27+
```
2728

2829

2930

3031
## Usage
3132

32-
1) Generate your keys
33-
```bash
34-
keydgen -f deterministic_key
35-
ls -lh deterministic_key*
36-
```
37-
38-
2) Allow time to pass, hoping an emergency does not arise when you have no access to your keys ...
39-
40-
_If_ the time comes where you need access but can't get to your keys, you can then obtain this
41-
utility and re-generate, or even directly add your key to a running `ssh-agent`.
42-
```bash
43-
keydgen -a
44-
```
45-
46-
3) Profit!
33+
1) Generate your keys
34+
```bash
35+
keydgen -f deterministic_key
36+
ls -lh deterministic_key*
37+
```
38+
39+
2) Allow time to pass, hoping an emergency does not arise when you have no access to your keys ...
40+
41+
_If_ the time comes where you need access but can't get to your keys, you can then obtain this
42+
utility and re-generate, or even directly add your key to a running `ssh-agent`.
43+
```bash
44+
keydgen -a
45+
```
46+
47+
3) Profit!
4748

4849

4950

keydgen_test.go

Lines changed: 69 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"errors"
54
"fmt"
65
"io/ioutil"
76
"os"
@@ -12,187 +11,95 @@ import (
1211
"github.com/google/goexpect"
1312
)
1413

15-
type keygenCase struct {
16-
name string
17-
expectFailure bool
18-
keydgen *Keydgen
19-
}
20-
21-
func init() {
22-
WorkFactor = 4096
23-
}
24-
25-
func testKeygenImport(k *Keydgen) error {
26-
27-
if _, err := k.GenerateKey(); err != nil {
28-
return err
29-
}
30-
31-
pub, err := k.MarshalPublicKey()
32-
if err != nil {
33-
return err
34-
}
35-
36-
tmpFile, err := ioutil.TempFile("", "keydgen_test")
37-
if err != nil {
38-
return err
39-
}
40-
41-
if err := writeKeyToFile(k, tmpFile.Name()); err != nil {
42-
return err
43-
}
44-
defer func() {
45-
os.Remove(tmpFile.Name())
46-
os.Remove(tmpFile.Name() + ".pub")
47-
}()
48-
49-
e, _, err := expect.Spawn("ssh-keygen -y -f "+tmpFile.Name(), -1)
50-
if err != nil {
51-
return err
52-
}
53-
defer e.Close()
54-
55-
expr := regexp.MustCompilePOSIX(regexp.QuoteMeta(string(pub)))
56-
if _, _, eErr := e.Expect(expr, -1); eErr != nil {
57-
err = errors.New("unable to verify generated public key with ssh-keygen")
58-
}
59-
60-
return err
61-
62-
}
14+
func TestKeydgen_GenerateKey(t *testing.T) {
6315

64-
func TestKeydgen_GenerateKey_DSA(t *testing.T) {
16+
WorkFactor = 1024 * 1
6517

66-
cases := []keygenCase{
18+
cases := []struct {
19+
name string
20+
expectFailure bool
21+
keydgen *Keydgen
22+
}{
23+
// DSA
6724
{
68-
name: "InvalidKeyLength",
69-
expectFailure: true,
25+
name: "DSA_InvalidKeyLength",
7026
keydgen: &Keydgen{
7127
Type: DSA,
7228
Bits: 100,
7329
Seed: []byte("keydgen"),
7430
},
31+
expectFailure: true,
7532
},
7633
{
77-
name: "1024",
34+
name: "DSA_1024",
7835
keydgen: &Keydgen{
7936
Type: DSA,
8037
Bits: 1024,
8138
Seed: []byte("keydgen"),
8239
},
8340
},
8441
{
85-
name: "2048",
42+
name: "DSA_2048",
8643
keydgen: &Keydgen{
8744
Type: DSA,
8845
Bits: 2048,
8946
Seed: []byte("keydgen"),
9047
},
9148
},
9249
{
93-
name: "3072",
50+
name: "DSA_3072",
9451
keydgen: &Keydgen{
9552
Type: DSA,
9653
Bits: 3072,
9754
Seed: []byte("keydgen"),
9855
},
9956
},
100-
}
101-
102-
for _, c := range cases {
103-
t.Run(c.name, func(t *testing.T) {
104-
start := time.Now()
105-
fmt.Print(t.Name())
106-
if err := testKeygenImport(c.keydgen); err != nil && !c.expectFailure {
107-
t.Fatal(err)
108-
}
109-
fmt.Printf(" PASS %s\n", time.Since(start))
110-
})
111-
}
112-
113-
}
114-
115-
func TestKeydgen_GenerateKey_ECDSA(t *testing.T) {
116-
117-
cases := []keygenCase{
57+
// ECDSA
11858
{
119-
name: "InvalidCurve",
120-
expectFailure: true,
59+
name: "ECDSA_InvalidCurve",
12160
keydgen: &Keydgen{
12261
Type: ECDSA,
12362
Curve: 128,
12463
Seed: []byte("keydgen"),
12564
},
65+
expectFailure: true,
12666
},
12767
{
128-
name: "256",
68+
name: "ECDSA_256",
12969
keydgen: &Keydgen{
13070
Type: ECDSA,
13171
Curve: 256,
13272
Seed: []byte("keydgen"),
13373
},
13474
},
13575
{
136-
name: "384",
76+
name: "ECDSA_384",
13777
keydgen: &Keydgen{
13878
Type: ECDSA,
13979
Curve: 384,
14080
Seed: []byte("keydgen"),
14181
},
14282
},
14383
{
144-
name: "521",
84+
name: "ECDSA_521",
14585
keydgen: &Keydgen{
14686
Type: ECDSA,
14787
Curve: 521,
14888
Seed: []byte("keydgen"),
14989
},
15090
},
151-
}
152-
153-
for _, c := range cases {
154-
t.Run(c.name, func(t *testing.T) {
155-
start := time.Now()
156-
fmt.Print(t.Name())
157-
if err := testKeygenImport(c.keydgen); err != nil && !c.expectFailure {
158-
t.Fatal(err)
159-
}
160-
fmt.Printf(" PASS %s\n", time.Since(start))
161-
})
162-
}
163-
164-
}
165-
166-
func TestKeydgen_GenerateKey_RSA(t *testing.T) {
167-
168-
cases := []keygenCase{
91+
// RSA
16992
{
170-
name: "2048",
93+
name: "RSA_2048",
17194
keydgen: &Keydgen{
17295
Type: RSA,
17396
Bits: 2048,
17497
Seed: []byte("keydgen"),
17598
},
17699
},
177-
}
178-
179-
for _, c := range cases {
180-
t.Run(c.name, func(t *testing.T) {
181-
start := time.Now()
182-
fmt.Print(t.Name())
183-
if err := testKeygenImport(c.keydgen); err != nil && !c.expectFailure {
184-
t.Fatal(err)
185-
}
186-
fmt.Printf(" PASS %s\n", time.Since(start))
187-
})
188-
}
189-
190-
}
191-
192-
func TestKeydgen_GenerateKey_ED25519(t *testing.T) {
193-
194-
cases := []keygenCase{
100+
// ED25519
195101
{
102+
name: "ED25519",
196103
keydgen: &Keydgen{
197104
Type: ED25519,
198105
Seed: []byte("keydgen"),
@@ -202,12 +109,56 @@ func TestKeydgen_GenerateKey_ED25519(t *testing.T) {
202109

203110
for _, c := range cases {
204111
t.Run(c.name, func(t *testing.T) {
112+
205113
start := time.Now()
206-
fmt.Print(t.Name())
207-
if err := testKeygenImport(c.keydgen); err != nil && !c.expectFailure {
114+
fmt.Print(c.name)
115+
116+
if _, err := c.keydgen.GenerateKey(); err != nil && !c.expectFailure {
208117
t.Fatal(err)
209118
}
119+
120+
if !c.expectFailure {
121+
122+
pub, err := c.keydgen.MarshalPublicKey()
123+
if err != nil {
124+
t.Fatal(err)
125+
}
126+
127+
filename := fmt.Sprintf("keydgen_test_%s_", c.keydgen.Type)
128+
if c.keydgen.Type == RSA || c.keydgen.Type == DSA {
129+
filename += fmt.Sprintf("%d_", c.keydgen.Bits)
130+
} else if c.keydgen.Type == ECDSA {
131+
filename += fmt.Sprintf("%d_", c.keydgen.Curve)
132+
}
133+
134+
tmpFile, err := ioutil.TempFile("", filename)
135+
if err != nil {
136+
t.Fatal(err)
137+
}
138+
139+
if err := writeKeyToFile(c.keydgen, tmpFile.Name()); err != nil {
140+
t.Fatal(err)
141+
}
142+
defer func() {
143+
os.Remove(tmpFile.Name())
144+
os.Remove(tmpFile.Name() + ".pub")
145+
}()
146+
147+
e, _, err := expect.Spawn("ssh-keygen -y -f "+tmpFile.Name(), -1)
148+
if err != nil {
149+
t.Fatal(err)
150+
}
151+
defer e.Close()
152+
153+
expr := regexp.MustCompilePOSIX(regexp.QuoteMeta(string(pub)))
154+
if out, _, err := e.Expect(expr, -1); err != nil {
155+
t.Fatal("unable to verify generated public key with ssh-keygen: " + out)
156+
}
157+
158+
}
159+
210160
fmt.Printf(" PASS %s\n", time.Since(start))
161+
211162
})
212163
}
213164

0 commit comments

Comments
 (0)