// Copyright 2014 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.packageinternalimport("crypto/rsa""crypto/x509""encoding/pem""errors""fmt")// ParseKey converts the binary contents of a private key file// to an *rsa.PrivateKey. It detects whether the private key is in a// PEM container or not. If so, it extracts the the private key// from PEM container before conversion. It only supports PEM// containers with no passphrase.funcParseKey(key[]byte)(*rsa.PrivateKey,error){block,_:=pem.Decode(key)ifblock!=nil{key=block.Bytes}parsedKey,err:=x509.ParsePKCS8PrivateKey(key)iferr!=nil{parsedKey,err=x509.ParsePKCS1PrivateKey(key)iferr!=nil{returnnil,fmt.Errorf("private key should be a PEM or plain PKCS1 or PKCS8; parse error: %v",err)}}parsed,ok:=parsedKey.(*rsa.PrivateKey)if!ok{returnnil,errors.New("private key is invalid")}returnparsed,nil}