v0.0.1
MOVED: * This codebase was originally part of r00t2.io/sysutils but has been split off to its own library.
This commit is contained in:
89
funcs_pemblocks.go
Normal file
89
funcs_pemblocks.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package cryptparse
|
||||
|
||||
import (
|
||||
`bytes`
|
||||
`encoding/pem`
|
||||
)
|
||||
|
||||
// Bytes returns a combined PEM bytes of all blocks in a PemBlocks. Any nil, empty, or otherwise invalid blocks are skipped.
|
||||
func (p *PemBlocks) Bytes() (combined []byte) {
|
||||
|
||||
var err error
|
||||
var buf *bytes.Buffer = new(bytes.Buffer)
|
||||
|
||||
for _, block := range p.Split() {
|
||||
if block == nil || block.Bytes == nil || block.Type == "" {
|
||||
continue
|
||||
}
|
||||
// We've ruled out "contextual" errors, so we ignore it here.
|
||||
if err = pem.Encode(buf, block); err != nil {
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
combined = buf.Bytes()
|
||||
_ = err
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// BytesStrict is like Bytes but is much more strict/safe (invalid/empty/nil blocks are not skipped) and will return any errors on encoding.
|
||||
func (p *PemBlocks) BytesStrict() (combined []byte, err error) {
|
||||
|
||||
var buf *bytes.Buffer = new(bytes.Buffer)
|
||||
|
||||
for _, block := range p.Split() {
|
||||
if err = pem.Encode(buf, block); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
combined = buf.Bytes()
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// BytesSplit returns separate PEM bytes of each block in a PemBlocks. Any nil, empty, or otherwise invalid blocks are skipped.
|
||||
func (p *PemBlocks) BytesSplit() (pems [][]byte) {
|
||||
|
||||
var b []byte
|
||||
|
||||
for _, block := range p.Split() {
|
||||
if block == nil || block.Bytes == nil || block.Type == "" {
|
||||
continue
|
||||
}
|
||||
// We've ruled out "contextual" errors, so we ignore it here.
|
||||
b = pem.EncodeToMemory(block)
|
||||
pems = append(pems, b)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// BytesSplitStrict is like BytesSplit but is much more strict/safe (invalid/empty/nil blocks are not skipped) and will return any errors on encoding.
|
||||
func (p *PemBlocks) BytesSplitStrict() (pems [][]byte, err error) {
|
||||
|
||||
var buf *bytes.Buffer = new(bytes.Buffer)
|
||||
|
||||
for _, block := range p.Split() {
|
||||
buf.Reset()
|
||||
if err = pem.Encode(buf, block); err != nil {
|
||||
return
|
||||
}
|
||||
pems = append(pems, buf.Bytes())
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// Split returns a more primitive-friendly representation of a PemBlocks.
|
||||
func (p *PemBlocks) Split() (native []*pem.Block) {
|
||||
|
||||
if p == nil {
|
||||
return
|
||||
}
|
||||
|
||||
native = *p
|
||||
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user