OLD | NEW |
1 package ssh | 1 package ssh |
2 | 2 |
3 import ( | 3 import ( |
| 4 "bytes" |
4 "crypto/dsa" | 5 "crypto/dsa" |
5 "crypto/ecdsa" | 6 "crypto/ecdsa" |
6 "crypto/elliptic" | 7 "crypto/elliptic" |
7 "crypto/rand" | 8 "crypto/rand" |
8 "crypto/rsa" | 9 "crypto/rsa" |
| 10 "encoding/base64" |
9 "reflect" | 11 "reflect" |
10 "strings" | 12 "strings" |
11 "testing" | 13 "testing" |
12 ) | 14 ) |
13 | 15 |
14 var ecdsaKey Signer | 16 var ecdsaKey Signer |
15 | 17 |
16 func rawKey(pub PublicKey) interface{} { | 18 func rawKey(pub PublicKey) interface{} { |
17 switch k := pub.(type) { | 19 switch k := pub.(type) { |
18 case *rsaPublicKey: | 20 case *rsaPublicKey: |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 sig, err := s.Sign(rand.Reader, data) | 158 sig, err := s.Sign(rand.Reader, data) |
157 if err != nil { | 159 if err != nil { |
158 t.Fatalf("dsa.Sign: %v", err) | 160 t.Fatalf("dsa.Sign: %v", err) |
159 } | 161 } |
160 | 162 |
161 if !s.PublicKey().Verify(data, sig) { | 163 if !s.PublicKey().Verify(data, sig) { |
162 t.Error("Verify failed.") | 164 t.Error("Verify failed.") |
163 } | 165 } |
164 } | 166 } |
165 | 167 |
| 168 func TestParseCert(t *testing.T) { |
| 169 // Cert generated by ssh-keygen 6.0p1 Debian-4. |
| 170 // % ssh-keygen -s ca-key -I test user-key |
| 171 b64data := "AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgb1srW/W3ZDjY
AO45xLYAwzHBDLsJ4Ux6ICFIkTjb1LEAAAADAQABAAAAYQCkoR51poH0wE8w72cqSB8Sszx+vAhzcMdC
O0wqHTj7UNENHWEXGrU0E0UQekD7U+yhkhtoyjbPOVIP7hNa6aRk/ezdh/iUnCIt4Jt1v3Z1h1P+hA4Q
uYFMHNB+rmjPwAcAAAAAAAAAAAAAAAEAAAAEdGVzdAAAAAAAAAAAAAAAAP//////////AAAAAAAAAIIA
AAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAA
AAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVz
ZXItcmMAAAAAAAAAAAAAAHcAAAAHc3NoLXJzYQAAAAMBAAEAAABhANFS2kaktpSGc+CcmEKPyw9mJC4n
ZKxHKTgLVZeaGbFZOvJTNzBspQHdy7Q1uKSfktxpgjZnksiu/tFF9ngyY2KFoc+U88ya95IZUycBGCUb
BQ8+bhDtw/icdDGQD5WnUwAAAG8AAAAHc3NoLXJzYQAAAGC8Y9Z2LQKhIhxf52773XaWrXdxP0t3GBVo
4A10vUWiYoAGepr6rQIoGGXFxT4B9Gp+nEBJjOwKDXPrAevow0T9ca8gZN+0ykbhSrXLE5Ao48rqr3zP
4O1/9P7e6gp0gw8=" |
| 172 |
| 173 data, err := base64.StdEncoding.DecodeString(b64data) |
| 174 if err != nil { |
| 175 t.Fatal("base64.StdEncoding.DecodeString: ", err) |
| 176 } |
| 177 key, rest, ok := ParsePublicKey(data) |
| 178 if !ok { |
| 179 t.Fatalf("could not parse certificate") |
| 180 } |
| 181 if len(rest) > 0 { |
| 182 t.Errorf("rest: got %q, want empty", rest) |
| 183 } |
| 184 _, ok = key.(*OpenSSHCertV01) |
| 185 if !ok { |
| 186 t.Fatalf("got %#v, want *OpenSSHCertV01", key) |
| 187 } |
| 188 |
| 189 marshaled := MarshalPublicKey(key) |
| 190 if !bytes.Equal(data, marshaled) { |
| 191 t.Errorf("marshaled certificate does not match original: got %q,
want %q", marshaled, data) |
| 192 } |
| 193 } |
| 194 |
166 func init() { | 195 func init() { |
167 raw, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) | 196 raw, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) |
168 ecdsaKey, _ = NewSignerFromKey(raw) | 197 ecdsaKey, _ = NewSignerFromKey(raw) |
169 } | 198 } |
OLD | NEW |