aboutsummaryrefslogtreecommitdiff
path: root/ssh/keys_test.go
diff options
context:
space:
mode:
authorMariano Cano <mariano.cano@gmail.com>2023-09-07 18:54:31 -0700
committerGopher Robot <gobot@golang.org>2024-05-29 18:20:30 +0000
commit349231f7e4e437ea89847c5dfce63eed67949f86 (patch)
tree53452794c606d22bacac0aa5b43eb0fd8f93ca01 /ssh/keys_test.go
parent44c9b0ff9e71f015c49f686c68a7950fac76623c (diff)
downloadgo-x-crypto-349231f7e4e437ea89847c5dfce63eed67949f86.tar.xz
ssh: implement CryptoPublicKey on sk keys
This commit implements the CryptoPublicKey interface for the skECDSAPublicKey and skEd25519PublicKey types. Fixes golang/go#62518 Change-Id: I2b8ac89196fbb3614bf5c675127bed23f1cf6b26 Reviewed-on: https://go-review.googlesource.com/c/crypto/+/526875 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Than McIntosh <thanm@google.com> Auto-Submit: Nicola Murino <nicola.murino@gmail.com> Reviewed-by: Nicola Murino <nicola.murino@gmail.com>
Diffstat (limited to 'ssh/keys_test.go')
-rw-r--r--ssh/keys_test.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/ssh/keys_test.go b/ssh/keys_test.go
index 36e1857..7b14429 100644
--- a/ssh/keys_test.go
+++ b/ssh/keys_test.go
@@ -726,3 +726,49 @@ func TestNewSignerWithAlgos(t *testing.T) {
t.Error("signer with algos created with restricted algorithms")
}
}
+
+func TestCryptoPublicKey(t *testing.T) {
+ for _, priv := range testSigners {
+ p1 := priv.PublicKey()
+ key, ok := p1.(CryptoPublicKey)
+ if !ok {
+ continue
+ }
+ p2, err := NewPublicKey(key.CryptoPublicKey())
+ if err != nil {
+ t.Fatalf("NewPublicKey(CryptoPublicKey) failed for %s, got: %v", p1.Type(), err)
+ }
+ if !reflect.DeepEqual(p1, p2) {
+ t.Errorf("got %#v in NewPublicKey, want %#v", p2, p1)
+ }
+ }
+ for _, d := range testdata.SKData {
+ p1, _, _, _, err := ParseAuthorizedKey(d.PubKey)
+ if err != nil {
+ t.Fatalf("parseAuthorizedKey returned error: %v", err)
+ }
+ k1, ok := p1.(CryptoPublicKey)
+ if !ok {
+ t.Fatalf("%T does not implement CryptoPublicKey", p1)
+ }
+
+ var p2 PublicKey
+ switch pub := k1.CryptoPublicKey().(type) {
+ case *ecdsa.PublicKey:
+ p2 = &skECDSAPublicKey{
+ application: "ssh:",
+ PublicKey: *pub,
+ }
+ case ed25519.PublicKey:
+ p2 = &skEd25519PublicKey{
+ application: "ssh:",
+ PublicKey: pub,
+ }
+ default:
+ t.Fatalf("unexpected type %T from CryptoPublicKey()", pub)
+ }
+ if !reflect.DeepEqual(p1, p2) {
+ t.Errorf("got %#v, want %#v", p2, p1)
+ }
+ }
+}