|
9 | 9 | "encoding/csv" |
10 | 10 | "encoding/hex" |
11 | 11 | "encoding/json" |
| 12 | + "encoding/pem" |
12 | 13 | "errors" |
13 | 14 | "flag" |
14 | 15 | "fmt" |
@@ -306,6 +307,27 @@ func writeFile(path string, data []byte) error { |
306 | 307 | return nil |
307 | 308 | } |
308 | 309 |
|
| 310 | +// possiblyConvertToPEM converts a DER-encoded certificate into PEM-encoded. |
| 311 | +// If the certificate is already PEM-encoded, it returns the original value. |
| 312 | +func possiblyConvertToPEM(data []byte) ([]byte, error) { |
| 313 | + block, _ := pem.Decode(data) |
| 314 | + if block != nil && block.Type == "CERTIFICATE" { |
| 315 | + // Already PEM-encoded |
| 316 | + return data, nil |
| 317 | + } |
| 318 | + |
| 319 | + derBlock := &pem.Block{ |
| 320 | + Type: "CERTIFICATE", |
| 321 | + Bytes: data, |
| 322 | + } |
| 323 | + pemBytes := pem.EncodeToMemory(derBlock) |
| 324 | + if pemBytes == nil { |
| 325 | + return nil, fmt.Errorf("failed to encode DER to PEM") |
| 326 | + } |
| 327 | + |
| 328 | + return pemBytes, nil |
| 329 | +} |
| 330 | + |
309 | 331 | func verifyCertificate(rootCA, intermediateCAs, leafCert string, ignore_critical bool) error { |
310 | 332 | args := []string{"verify"} |
311 | 333 | if ignore_critical { |
@@ -374,14 +396,22 @@ func main() { |
374 | 396 | if err != nil { |
375 | 397 | log.Fatalf("Failed to read DICE ICA certificate file: %v", err) |
376 | 398 | } |
377 | | - certs.diceICA = append(certs.diceICA, cert{id: flags.DiceICA, data: string(diceICABytes)}) |
| 399 | + diceICAPemBytes, err := possiblyConvertToPEM(diceICABytes) |
| 400 | + if err != nil { |
| 401 | + log.Fatalf("Failed to convert DICE ICA certificate to PEM: %v", err) |
| 402 | + } |
| 403 | + certs.diceICA = append(certs.diceICA, cert{id: flags.DiceICA, data: string(diceICAPemBytes)}) |
378 | 404 |
|
379 | 405 | if flags.ExtICA != "" { |
380 | 406 | extICABytes, err := utils.ReadFile(flags.ExtICA) |
381 | 407 | if err != nil { |
382 | 408 | log.Fatalf("Failed to read external ICA certificate file: %v", err) |
383 | 409 | } |
384 | | - certs.extICA = append(certs.extICA, cert{id: flags.ExtICA, data: string(extICABytes)}) |
| 410 | + extICAPemBytes, err := possiblyConvertToPEM(extICABytes) |
| 411 | + if err != nil { |
| 412 | + log.Fatalf("Failed to convert EXT ICA certificate to PEM: %v", err) |
| 413 | + } |
| 414 | + certs.extICA = append(certs.extICA, cert{id: flags.ExtICA, data: string(extICAPemBytes)}) |
385 | 415 | } |
386 | 416 |
|
387 | 417 | var diceICACerts strings.Builder |
|
0 commit comments