Skip to content

Commit 89fb78e

Browse files
committed
refactor: normalize secrets and pki constants
1 parent 582ff71 commit 89fb78e

File tree

4 files changed

+74
-63
lines changed

4 files changed

+74
-63
lines changed

agent/internal/service/service.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ import (
2222
)
2323

2424
const (
25-
defaultComponent = "attestor-service"
26-
statusHealthy = "healthy"
27-
slash = "/"
28-
defaultHTTPTimeout = 10 * time.Second
29-
defaultSignalCapacity = 1
30-
statusCodeThreshold = 400
25+
defaultComponent = "attestor-service"
26+
statusHealthy = "healthy"
27+
slash = "/"
28+
defaultHTTPTimeout = 10 * time.Second
29+
defaultSignalCapacity = 1
30+
statusCodeThreshold = 400
31+
permOwnerReadWrite = 0o600
32+
permOwnerReadWriteExec = 0o700
3133
)
3234

3335
// Config holds the service configuration
@@ -389,7 +391,7 @@ func (s *Service) httpClientOrDefault() *http.Client {
389391
if s.httpClient != nil {
390392
return s.httpClient
391393
}
392-
return newHTTPClient()
394+
return &http.Client{Timeout: defaultHTTPTimeout}
393395
}
394396

395397
func (s *Service) postJSON(endpoint string, payload []byte) (*http.Response, error) {

pkg/pki/ca.go

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,30 @@ import (
1515
"time"
1616
)
1717

18+
const (
19+
defaultCAValidity = 10 * 365 * 24 * time.Hour
20+
defaultCertificateTTL = 8 * time.Hour
21+
defaultClockSkew = 5 * time.Minute
22+
permOwnerReadWrite = 0o600
23+
permOwnerReadWriteExec = 0o750
24+
permOwnerReadGroupRead = 0o640
25+
maxSerialShift = 128
26+
)
27+
1828
type CertificateAuthority struct {
19-
cert *x509.Certificate
20-
key *ecdsa.PrivateKey
21-
certPath string
22-
keyPath string
29+
cert *x509.Certificate
30+
key *ecdsa.PrivateKey
31+
certPath string
32+
keyPath string
2333
}
2434

2535
func LoadOrCreateCA(certPath, keyPath, commonName string, validFor time.Duration) (*CertificateAuthority, error) {
26-
if err := os.MkdirAll(filepath.Dir(certPath), dirPermPrivate); err != nil {
27-
return nil, err
28-
}
29-
if err := os.MkdirAll(filepath.Dir(keyPath), dirPermPrivate); err != nil {
30-
return nil, err
31-
}
36+
if err := os.MkdirAll(filepath.Dir(certPath), permOwnerReadWriteExec); err != nil {
37+
return nil, err
38+
}
39+
if err := os.MkdirAll(filepath.Dir(keyPath), permOwnerReadWriteExec); err != nil {
40+
return nil, err
41+
}
3242

3343
if _, err := os.Stat(certPath); err == nil {
3444
return LoadCA(certPath, keyPath)
@@ -43,7 +53,7 @@ func LoadOrCreateCA(certPath, keyPath, commonName string, validFor time.Duration
4353
return nil, err
4454
}
4555

46-
serialNumberLimit := maxSerialNumber
56+
serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), maxSerialShift)
4757
serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
4858
if err != nil {
4959
return nil, err
@@ -55,7 +65,7 @@ func LoadOrCreateCA(certPath, keyPath, commonName string, validFor time.Duration
5565
CommonName: commonName,
5666
Organization: []string{"keep"},
5767
},
58-
NotBefore: time.Now().Add(-defaultClockSkew),
68+
NotBefore: time.Now().Add(-defaultClockSkew),
5969
NotAfter: time.Now().Add(validFor),
6070
KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageDigitalSignature | x509.KeyUsageCRLSign,
6171
BasicConstraintsValid: true,

pkg/pki/device_test.go

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import (
1414
)
1515

1616
func TestGenerateSigningKey(t *testing.T) {
17-
tmpDir := t.TempDir()
18-
keyPath := filepath.Join(tmpDir, testKeyName)
17+
tmpDir := t.TempDir()
18+
keyPath := filepath.Join(tmpDir, testKeyName)
1919

2020
t.Run("generates valid ECDSA key", func(t *testing.T) {
2121
priv, err := GenerateSigningKey(keyPath)
@@ -106,7 +106,7 @@ func TestGenerateSigningKey(t *testing.T) {
106106

107107
func TestLoadSigningKey(t *testing.T) {
108108
tmpDir := t.TempDir()
109-
keyPath := filepath.Join(tmpDir, testKeyName)
109+
keyPath := filepath.Join(tmpDir, testKeyName)
110110

111111
t.Run("loads valid key", func(t *testing.T) {
112112
// Generate a key first
@@ -201,13 +201,13 @@ invalidbase64data!!!
201201

202202
func TestPublicKeyPEM(t *testing.T) {
203203
tmpDir := t.TempDir()
204-
keyPath := filepath.Join(tmpDir, testKeyName)
204+
keyPath := filepath.Join(tmpDir, testKeyName)
205205

206206
t.Run("converts to valid public key PEM", func(t *testing.T) {
207-
priv, err := GenerateSigningKey(keyPath)
208-
if err != nil {
209-
t.Fatalf(msgGenerateKeyFail, err)
210-
}
207+
priv, err := GenerateSigningKey(keyPath)
208+
if err != nil {
209+
t.Fatalf(msgGenerateKeyFail, err)
210+
}
211211

212212
pubPEM, err := PublicKeyPEM(priv)
213213
if err != nil {
@@ -246,10 +246,10 @@ func TestCreateCSR(t *testing.T) {
246246
tmpDir := t.TempDir()
247247
keyPath := filepath.Join(tmpDir, "test.key")
248248

249-
priv, err := GenerateSigningKey(keyPath)
250-
if err != nil {
251-
t.Fatalf(msgGenerateKeyFail, err)
252-
}
249+
priv, err := GenerateSigningKey(keyPath)
250+
if err != nil {
251+
t.Fatalf(msgGenerateKeyFail, err)
252+
}
253253

254254
t.Run("creates valid CSR", func(t *testing.T) {
255255
deviceID := "test-device-123"
@@ -482,45 +482,45 @@ invalid certificate data
482482

483483
// Benchmark tests
484484
func BenchmarkGenerateSigningKey(b *testing.B) {
485-
tmpDir := b.TempDir()
486-
487-
b.ResetTimer()
488-
for i := 0; i < b.N; i++ {
489-
keyPath := filepath.Join(tmpDir, benchKeyName)
490-
_, err := GenerateSigningKey(keyPath)
491-
if err != nil {
492-
b.Fatalf("GenerateSigningKey failed: %v", err)
493-
}
494-
os.Remove(keyPath) // Clean up
495-
}
485+
tmpDir := b.TempDir()
486+
487+
b.ResetTimer()
488+
for i := 0; i < b.N; i++ {
489+
keyPath := filepath.Join(tmpDir, benchKeyName)
490+
_, err := GenerateSigningKey(keyPath)
491+
if err != nil {
492+
b.Fatalf("GenerateSigningKey failed: %v", err)
493+
}
494+
os.Remove(keyPath) // Clean up
495+
}
496496
}
497497

498498
func BenchmarkCreateCSR(b *testing.B) {
499-
tmpDir := b.TempDir()
500-
keyPath := filepath.Join(tmpDir, benchKeyName)
501-
502-
priv, err := GenerateSigningKey(keyPath)
503-
if err != nil {
504-
b.Fatalf(msgGenerateKeyFail, err)
505-
}
506-
507-
b.ResetTimer()
508-
for i := 0; i < b.N; i++ {
509-
_, err := CreateCSR(priv, "bench-device")
510-
if err != nil {
511-
b.Fatalf("CreateCSR failed: %v", err)
512-
}
513-
}
499+
tmpDir := b.TempDir()
500+
keyPath := filepath.Join(tmpDir, benchKeyName)
501+
502+
priv, err := GenerateSigningKey(keyPath)
503+
if err != nil {
504+
b.Fatalf(msgGenerateKeyFail, err)
505+
}
506+
507+
b.ResetTimer()
508+
for i := 0; i < b.N; i++ {
509+
_, err := CreateCSR(priv, "bench-device")
510+
if err != nil {
511+
b.Fatalf("CreateCSR failed: %v", err)
512+
}
513+
}
514514
}
515515

516516
func BenchmarkPublicKeyPEM(b *testing.B) {
517517
tmpDir := b.TempDir()
518-
keyPath := filepath.Join(tmpDir, benchKeyName)
518+
keyPath := filepath.Join(tmpDir, benchKeyName)
519519

520-
priv, err := GenerateSigningKey(keyPath)
521-
if err != nil {
522-
b.Fatalf(msgGenerateKeyFail, err)
523-
}
520+
priv, err := GenerateSigningKey(keyPath)
521+
if err != nil {
522+
b.Fatalf(msgGenerateKeyFail, err)
523+
}
524524

525525
b.ResetTimer()
526526
for i := 0; i < b.N; i++ {

pkg/secrets/vault.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212

1313
// VaultManager implements secret management using HashiCorp Vault
1414
const (
15-
slash = "/"
1615
valueKey = "value"
1716
dataKey = "data"
1817
vaultAddrKey = "VAULT_ADDR"

0 commit comments

Comments
 (0)