Source File
pem.go
Belonging Package
encoding/pem
package pem
import (
)
=
if bytes.HasPrefix(, pemStart[1:]) {
= [len(pemStart)-1 : len()]
} else if := bytes.Index(, pemStart); >= 0 {
= [+len(pemStart) : len()]
} else {
return nil,
}
, := getLine()
if !bytes.HasSuffix(, pemEndOfLine) {
return decodeError(, )
}
= [0 : len()-len(pemEndOfLine)]
= &Block{
Headers: make(map[string]string),
Type: string(),
}
:= [:]
:= len() + len(pemEndOfLine)
if len() < {
return decodeError(, )
}
:= [:]
= [:]
if !bytes.HasPrefix(, ) ||
!bytes.HasSuffix(, pemEndOfLine) {
return decodeError(, )
}
if , := getLine(); len() != 0 {
return decodeError(, )
}
:= removeSpacesAndTabs([:])
.Bytes = make([]byte, base64.StdEncoding.DecodedLen(len()))
, := base64.StdEncoding.Decode(.Bytes, )
if != nil {
return decodeError(, )
}
.Bytes = .Bytes[:]
, := Decode()
if == nil {
=
}
return ,
}
const pemLineLength = 64
type lineBreaker struct {
line [pemLineLength]byte
used int
out io.Writer
}
var nl = []byte{'\n'}
func ( *lineBreaker) ( []byte) ( int, error) {
if .used+len() < pemLineLength {
copy(.line[.used:], )
.used += len()
return len(), nil
}
, = .out.Write(.line[0:.used])
if != nil {
return
}
:= pemLineLength - .used
.used = 0
, = .out.Write([0:])
if != nil {
return
}
, = .out.Write(nl)
if != nil {
return
}
return .([:])
}
func ( *lineBreaker) () ( error) {
if .used > 0 {
_, = .out.Write(.line[0:.used])
if != nil {
return
}
_, = .out.Write(nl)
}
return
}
func ( io.Writer, , string) error {
, := .Write([]byte( + ": " + + "\n"))
return
}
if {
if := writeHeader(, , .Headers[]); != nil {
return
}
sort.Strings()
for , := range {
if := writeHeader(, , .Headers[]); != nil {
return
}
}
if , := .Write(nl); != nil {
return
}
}
var lineBreaker
.out =
:= base64.NewEncoder(base64.StdEncoding, &)
if , := .Write(.Bytes); != nil {
return
}
.Close()
.Close()
if , := .Write(pemEnd[1:]); != nil {
return
}
, := .Write([]byte(.Type + "-----\n"))
return
}
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |