Documentation ¶
Index ¶
- Constants
- Variables
- func DecryptPEMBlock(block *pem.Block, password []byte) ([]byte, error)
- func DecryptPKCS8PrivateKey(data, password []byte) ([]byte, error)
- func EncryptPKCS8PrivateKey(rand io.Reader, data, password []byte, alg x509.PEMCipher) (*pem.Block, error)
- func MarshalPKCS8PrivateKey(key interface{}) ([]byte, error)
- func MarshalPKIXPublicKey(pub interface{}) ([]byte, error)
- func Parse(b []byte, opts ...Options) (interface{}, error)
- func ParseDER(b []byte) (interface{}, error)
- func ParseKey(b []byte, opts ...Options) (interface{}, error)
- func ParseOpenSSHPrivateKey(key []byte, opts ...Options) (crypto.PrivateKey, error)
- func ParsePKCS8PrivateKey(der []byte) (key interface{}, err error)
- func ParsePKIXPublicKey(derBytes []byte) (pub interface{}, err error)
- func ParseSSH(b []byte) (interface{}, error)
- func Read(filename string, opts ...Options) (interface{}, error)
- func ReadCertificate(filename string, opts ...Options) (*x509.Certificate, error)
- func ReadCertificateBundle(filename string) ([]*x509.Certificate, error)
- func Serialize(in interface{}, opts ...Options) (*pem.Block, error)
- func SerializeOpenSSHPrivateKey(key crypto.PrivateKey, opts ...Options) (*pem.Block, error)
- type Options
- func ToFile(name string, perm os.FileMode) Options
- func WithComment(comment string) Options
- func WithFilename(name string) Options
- func WithFirstBlock() Options
- func WithOpenSSH(v bool) Options
- func WithPKCS8(v bool) Options
- func WithPassword(pass []byte) Options
- func WithPasswordFile(filename string) Options
- func WithPasswordPrompt(prompt string) Options
Constants ¶
const PBKDF2Iterations = 100000
PBKDF2Iterations is the default number of iterations for PBKDF2, 100k iterations. Nist recommends at least 10k, 1Passsword uses 100k.
const PBKDF2SaltSize = 16
PBKDF2SaltSize is the default size of the salt for PBKDF2, 128-bit salt.
Variables ¶
var DefaultEncCipher = x509.PEMCipherAES256
DefaultEncCipher is the default algorithm used when encrypting sensitive data in the PEM format.
Functions ¶
func DecryptPEMBlock ¶
DecryptPEMBlock takes a password encrypted PEM block and the password used to encrypt it and returns a slice of decrypted DER encoded bytes.
If the PEM blocks has the Proc-Type header set to "4,ENCRYPTED" it uses x509.DecryptPEMBlock to decrypt the block. If not it tries to decrypt the block using AES-128-CBC, AES-192-CBC, AES-256-CBC, DES, or 3DES using the key derived using PBKDF2 over the given password.
func DecryptPKCS8PrivateKey ¶
DecryptPKCS8PrivateKey takes a password encrypted private key using the PKCS#8 encoding and returns the decrypted data in PKCS#8 form.
It supports AES-128-CBC, AES-192-CBC, AES-256-CBC, DES, or 3DES encrypted data using the key derived with PBKDF2 over the given password.
func EncryptPKCS8PrivateKey ¶
func EncryptPKCS8PrivateKey(rand io.Reader, data, password []byte, alg x509.PEMCipher) (*pem.Block, error)
EncryptPKCS8PrivateKey returns a PEM block holding the given PKCS#8 encroded private key, encrypted with the specified algorithm and a PBKDF2 derived key from the given password.
func MarshalPKCS8PrivateKey ¶
MarshalPKCS8PrivateKey converts a private key to PKCS#8 encoded form. The following key types are supported: *rsa.PrivateKey, *ecdsa.PublicKey, ed25519.PrivateKey. Unsupported key types result in an error.
func MarshalPKIXPublicKey ¶
MarshalPKIXPublicKey serializes a public key to DER-encoded PKIX format. The following key types are supported: *rsa.PublicKey, *ecdsa.PublicKey, ed25519.Publickey. Unsupported key types result in an error.
func ParseDER ¶
ParseDER parses the given DER-encoded bytes and results the public or private key encoded.
func ParseKey ¶
ParseKey returns the key or the public key of a certificate or certificate signing request in the given PEM-encoded bytes.
func ParseOpenSSHPrivateKey ¶
func ParseOpenSSHPrivateKey(key []byte, opts ...Options) (crypto.PrivateKey, error)
ParseOpenSSHPrivateKey parses a private key in OpenSSH PEM format.
Implemented based on the documentation at https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key
This method is based on the implementation at https://github.com/golang/crypto/blob/master/ssh/keys.go
func ParsePKCS8PrivateKey ¶
ParsePKCS8PrivateKey parses an unencrypted, PKCS#8 private key. See RFC 5208.
Supported key types include RSA, ECDSA, and Ed25519. Unknown key types result in an error.
On success, key will be of type *rsa.PrivateKey, *ecdsa.PublicKey, or ed25519.PrivateKey.
func ParsePKIXPublicKey ¶
ParsePKIXPublicKey parses a DER encoded public key. These values are typically found in PEM blocks with "BEGIN PUBLIC KEY".
Supported key types include RSA, DSA, ECDSA, and Ed25519. Unknown key types result in an error.
On success, pub will be of type *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey, or ed25519.PublicKey.
func ParseSSH ¶
ParseSSH parses parses a public key from an authorized_keys file used in OpenSSH according to the sshd(8) manual page.
func Read ¶
Read returns the key or certificate encoded in the given PEM file. If the file is encrypted it will ask for a password and it will try to decrypt it.
Supported keys algorithms are RSA and EC. Supported standards for private keys are PKCS#1, PKCS#8, RFC5915 for EC, and base64-encoded DER for certificates and public keys.
func ReadCertificate ¶
func ReadCertificate(filename string, opts ...Options) (*x509.Certificate, error)
ReadCertificate returns a *x509.Certificate from the given filename. It supports certificates formats PEM and DER.
func ReadCertificateBundle ¶
func ReadCertificateBundle(filename string) ([]*x509.Certificate, error)
ReadCertificateBundle returns a list of *x509.Certificate from the given filename. It supports certificates formats PEM and DER. If a DER-formatted file is given only one certificate will be returned.
func SerializeOpenSSHPrivateKey ¶
SerializeOpenSSHPrivateKey serialize a private key in the OpenSSH PEM format.
Types ¶
type Options ¶
type Options func(o *context) error
Options is the type to add attributes to the context.
func ToFile ¶
ToFile is a method that adds the given filename and permissions to the context. It is used in the Serialize to store PEM in disk.
func WithComment ¶
WithComment is an option used in the Serialize method to add a comment in the OpenSSH private keys. WithOpenSSH must be set to true too.
func WithFilename ¶
WithFilename is a method that adds the given filename to the context.
func WithFirstBlock ¶
func WithFirstBlock() Options
WithFirstBlock will avoid failing if a PEM contains more than one block or certificate and it will only look at the first.
func WithOpenSSH ¶
WithOpenSSH is an option used in the Serialize method to use OpenSSH encoding form on the private keys. With v set to false default form will be used.
func WithPKCS8 ¶
WithPKCS8 with v set to true returns an option used in the Serialize method to use the PKCS#8 encoding form on the private keys. With v set to false default form will be used.
func WithPassword ¶
WithPassword is a method that adds the given password to the context.
func WithPasswordFile ¶
WithPasswordFile is a method that adds the password in a file to the context.
func WithPasswordPrompt ¶
WithPasswordPrompt ask the user for a password and adds it to the context.