Skip to content

Commit a28676c

Browse files
authored
feat(websecure): add support for ed25519 certificates (#513)
1 parent 2ec061b commit a28676c

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

internal/websecure/ed25519_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package websecure
2+
3+
import (
4+
"os"
5+
"testing"
6+
)
7+
8+
var (
9+
fixtureEd25519Certificate = `-----BEGIN CERTIFICATE-----
10+
MIIBQDCB86ADAgECAhQdB4qB6dV0/u1lwhJofQgkmjjV1zAFBgMrZXAwLzELMAkG
11+
A1UEBhMCREUxIDAeBgNVBAMMF2VkMjU1MTktdGVzdC5qZXRrdm0uY29tMB4XDTI1
12+
MDUyMzEyNTkyN1oXDTI3MDQyMzEyNTkyN1owLzELMAkGA1UEBhMCREUxIDAeBgNV
13+
BAMMF2VkMjU1MTktdGVzdC5qZXRrdm0uY29tMCowBQYDK2VwAyEA9tLyoulJn7Ev
14+
bf8kuD1ZGdA092773pCRjFEDKpXHonyjITAfMB0GA1UdDgQWBBRkmrVMfsLY57iy
15+
r/0POP0S4QxCADAFBgMrZXADQQBfTRvqavLHDYQiKQTgbGod+Yn+fIq2lE584+1U
16+
C4wh9peIJDFocLBEAYTQpEMKxa4s0AIRxD+a7aCS5oz0e/0I
17+
-----END CERTIFICATE-----`
18+
19+
fixtureEd25519PrivateKey = `-----BEGIN PRIVATE KEY-----
20+
MC4CAQAwBQYDK2VwBCIEIKV08xUsLRHBfMXqZwxVRzIbViOp8G7aQGjPvoRFjujB
21+
-----END PRIVATE KEY-----`
22+
23+
certStore *CertStore
24+
certSigner *SelfSigner
25+
)
26+
27+
func TestMain(m *testing.M) {
28+
tlsStorePath, err := os.MkdirTemp("", "jktls.*")
29+
if err != nil {
30+
defaultLogger.Fatal().Err(err).Msg("failed to create temp directory")
31+
}
32+
33+
certStore = NewCertStore(tlsStorePath, nil)
34+
certStore.LoadCertificates()
35+
36+
certSigner = NewSelfSigner(
37+
certStore,
38+
nil,
39+
"ci.jetkvm.com",
40+
"JetKVM",
41+
"JetKVM",
42+
"JetKVM",
43+
)
44+
45+
m.Run()
46+
47+
os.RemoveAll(tlsStorePath)
48+
}
49+
50+
func TestSaveEd25519Certificate(t *testing.T) {
51+
err, _ := certStore.ValidateAndSaveCertificate("ed25519-test.jetkvm.com", fixtureEd25519Certificate, fixtureEd25519PrivateKey, true)
52+
if err != nil {
53+
t.Fatalf("failed to save certificate: %v", err)
54+
}
55+
}

internal/websecure/utils.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package websecure
22

33
import (
44
"crypto/ecdsa"
5+
"crypto/ed25519"
56
"crypto/rand"
67
"crypto/rsa"
78
"crypto/tls"
@@ -37,11 +38,15 @@ func keyToFile(cert *tls.Certificate, filename string) error {
3738
if e != nil {
3839
return fmt.Errorf("failed to marshal EC private key: %v", e)
3940
}
40-
4141
keyBlock = pem.Block{
4242
Type: "EC PRIVATE KEY",
4343
Bytes: b,
4444
}
45+
case ed25519.PrivateKey:
46+
keyBlock = pem.Block{
47+
Type: "ED25519 PRIVATE KEY",
48+
Bytes: k,
49+
}
4550
default:
4651
return fmt.Errorf("unknown private key type: %T", k)
4752
}

0 commit comments

Comments
 (0)