ssh: add sk-ecdsa-sha2-nistp256 and sk-ed25519
This adds server-side support for the newly introduced OpenSSH keytypes sk-ecdsa-sha2-nistp256@openssh.com and sk-ed25519@openssh.com (including their corresponding certificates), which are backed by U2F/FIDO2 tokens. Change-Id: I53d5ed3d0457ae4758ee986055e187ee5787a2d1 Reviewed-on: https://go-review.googlesource.com/c/crypto/+/208017 Reviewed-by: Han-Wen Nienhuys <hanwen@google.com> Run-TryBot: Han-Wen Nienhuys <hanwen@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
committed by
Han-Wen Nienhuys
parent
b544559bb6
commit
86a70503ff
@@ -13,6 +13,7 @@ import (
|
||||
"crypto/rsa"
|
||||
"crypto/x509"
|
||||
"encoding/base64"
|
||||
"encoding/hex"
|
||||
"encoding/pem"
|
||||
"fmt"
|
||||
"io"
|
||||
@@ -572,3 +573,45 @@ func TestInvalidKeys(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSKKeys(t *testing.T) {
|
||||
for _, d := range testdata.SKData {
|
||||
pk, _, _, _, err := ParseAuthorizedKey(d.PubKey)
|
||||
if err != nil {
|
||||
t.Fatalf("parseAuthorizedKey returned error: %v", err)
|
||||
}
|
||||
|
||||
sigBuf := make([]byte, hex.DecodedLen(len(d.HexSignature)))
|
||||
if _, err := hex.Decode(sigBuf, d.HexSignature); err != nil {
|
||||
t.Fatalf("hex.Decode() failed: %v", err)
|
||||
}
|
||||
|
||||
dataBuf := make([]byte, hex.DecodedLen(len(d.HexData)))
|
||||
if _, err := hex.Decode(dataBuf, d.HexData); err != nil {
|
||||
t.Fatalf("hex.Decode() failed: %v", err)
|
||||
}
|
||||
|
||||
sig, _, ok := parseSignature(sigBuf)
|
||||
if !ok {
|
||||
t.Fatalf("parseSignature(%v) failed", sigBuf)
|
||||
}
|
||||
|
||||
// Test that good data and signature pass verification
|
||||
if err := pk.Verify(dataBuf, sig); err != nil {
|
||||
t.Errorf("%s: PublicKey.Verify(%v, %v) failed: %v", d.Name, dataBuf, sig, err)
|
||||
}
|
||||
|
||||
// Invalid data being passed in
|
||||
invalidData := []byte("INVALID DATA")
|
||||
if err := pk.Verify(invalidData, sig); err == nil {
|
||||
t.Errorf("%s with invalid data: PublicKey.Verify(%v, %v) passed unexpectedly", d.Name, invalidData, sig)
|
||||
}
|
||||
|
||||
// Change byte in blob to corrup signature
|
||||
sig.Blob[5] = byte('A')
|
||||
// Corrupted data being passed in
|
||||
if err := pk.Verify(dataBuf, sig); err == nil {
|
||||
t.Errorf("%s with corrupted signature: PublicKey.Verify(%v, %v) passed unexpectedly", d.Name, dataBuf, sig)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user