| // Copyright 2016 The LUCI Authors. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package utils |
| |
| import ( |
| "encoding/pem" |
| "fmt" |
| ) |
| |
| // ParsePEM takes pem-encoded block and decodes it, checking the header. |
| func ParsePEM(data, header string) ([]byte, error) { |
| block, rest := pem.Decode([]byte(data)) |
| if len(rest) != 0 || block == nil { |
| return nil, fmt.Errorf("not a valid %q PEM", header) |
| } |
| if block.Type != header { |
| return nil, fmt.Errorf("expecting %q, got %q", header, block.Type) |
| } |
| return block.Bytes, nil |
| } |
| |
| // DumpPEM transforms block to pem-encoding. |
| // |
| // Reverse of ParsePEM. |
| func DumpPEM(data []byte, header string) string { |
| return string(pem.EncodeToMemory(&pem.Block{ |
| Type: header, |
| Bytes: data, |
| })) |
| } |