code: func ParseDSAPrivateKey(der []byte) (*dsa.PrivateKey, error) {
  	var k struct {
  		Version int
  		P       *big.Int
  		Q       *big.Int
  		G       *big.Int
  		Priv    *big.Int
  		Pub     *big.Int
  	}
  	rest, err := asn1.Unmarshal(der, &k)
  	if err != nil {
  		return nil, errors.New("ssh: failed to parse DSA key: " + err.Error())
  	}
  	if len(rest) > 0 {
  		return nil, errors.New("ssh: garbage after DSA key")
  	}
  
  	return &dsa.PrivateKey{
  		PublicKey: dsa.PublicKey{
  			Parameters: dsa.Parameters{
  				P: k.P,
  				Q: k.Q,
  				G: k.G,
  			},
  			Y: k.Priv,
  		},
  		X: k.Pub,
  	}, nil
  }
docs: // ParseDSAPrivateKey returns a DSA private key from its ASN.1 DER encoding, as
  // specified by the OpenSSL DSA man page.