chore(openvpn/extract): simplify PEM extract

This commit is contained in:
Quentin McGaw
2023-04-01 16:57:09 +00:00
parent 4ba159e483
commit c7a841f4b4
2 changed files with 14 additions and 15 deletions

View File

@@ -1,33 +1,23 @@
package extract
import (
"encoding/base64"
"encoding/pem"
"errors"
"regexp"
"strings"
"fmt"
)
var (
errPEMDecode = errors.New("cannot decode PEM encoded block")
)
var (
regexPEMBegin = regexp.MustCompile(`-----BEGIN [A-Za-z ]+-----`)
regexPEMEnd = regexp.MustCompile(`-----END [A-Za-z ]+-----`)
)
func PEM(b []byte) (encodedData string, err error) {
pemBlock, _ := pem.Decode(b)
if pemBlock == nil {
return "", errPEMDecode
return "", fmt.Errorf("%w", errPEMDecode)
}
encodedBytes := pem.EncodeToMemory(pemBlock)
encodedData = string(encodedBytes)
encodedData = strings.ReplaceAll(encodedData, "\n", "")
beginPrefix := regexPEMBegin.FindString(encodedData)
encodedData = strings.TrimPrefix(encodedData, beginPrefix)
endPrefix := regexPEMEnd.FindString(encodedData)
encodedData = strings.TrimSuffix(encodedData, endPrefix)
der := pemBlock.Bytes
encodedData = base64.StdEncoding.EncodeToString(der)
return encodedData, nil
}