// Copyright 2018 Drone.IO Inc. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package licenseutil //go:generate license-keygen -out testdata/id_ed25519 //go:generate license-create -in testdata/id_ed25519 -out testdata/license.txt -cus cus_CxoyqaC4p4Hjl0 -sub sub_A4l9XkCxyZPcS2 import ( "encoding/base64" license_keyinit "github.com/drone/go-license/cmd/license-keyinit" "io/fs" "os" "golang.org/x/crypto/ed25519" ) // ReadPublicKey reads a base64-encoded public key file. func ReadPublicKey(path string) (ed25519.PublicKey, error) { var ( data []byte err error ) if path == "empty" { data, _ = fs.ReadFile(license_keyinit.Files, "id_ed25519.pub") } else { data, err = os.ReadFile(path) } if err != nil { return nil, err } return DecodePublicKey(data) } // ReadPrivateKey reads a base64-encoded private key file. func ReadPrivateKey(path string) (ed25519.PrivateKey, error) { var ( data []byte err error ) if path == "empty" { data, _ = fs.ReadFile(license_keyinit.Files, "id_ed25519") } else { data, err = os.ReadFile(path) } if err != nil { return nil, err } return DecodePrivateKey(data) } // DecodePublicKey decodes a base64-encoded private key. func DecodePublicKey(data []byte) (ed25519.PublicKey, error) { decoded, err := decode(data) if err != nil { return nil, err } return ed25519.PublicKey(decoded), nil } // DecodePrivateKey decodes a base64-encoded private key. func DecodePrivateKey(data []byte) (ed25519.PrivateKey, error) { decoded, err := decode(data) if err != nil { return nil, err } return ed25519.PrivateKey(decoded), nil } func decode(b []byte) ([]byte, error) { enc := base64.StdEncoding buf := make([]byte, enc.DecodedLen(len(b))) n, err := enc.Decode(buf, b) return buf[:n], err }