读取DSA专用密钥进行签名

I am new to golang and want to implement a functionality from my olde C-Program.

I have a "DSA PRIVATE KEY" with passphrase and a "CERTIFICATE"

In C I did:

{
char *privkey=
  "-----BEGIN DSA PRIVATE KEY-----
"
  "Proc-Type: 4,ENCRYPTED
"
  "DEK-Info: DES-EDE3-CBC, xxxxxx
"
  "-----END DSA PRIVATE KEY-----
"
  "-----BEGIN CERTIFICATE-----
"
  "xxxx
"
  "Og==
"
  "-----END CERTIFICATE-----
"
;
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();
BIO *mem = BIO_new(BIO_s_mem());
BIO_puts(mem, privkey);
dsa = PEM_read_bio_DSAPrivateKey(mem, NULL, NULL, "passphrase");

Byte hash[EVP_MAX_MD_SIZE];
unsigned int hashLen = EVP_MAX_MD_SIZE;
EVP_MD_CTX mdctx;
EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, EVP_dss1(), NULL);
EVP_DigestUpdate(&mdctx, data, dataLen);
EVP_DigestFinal_ex(&mdctx, hash, &hashLen);
EVP_MD_CTX_cleanup(&mdctx);

Byte signatur[1024];
memset(signatur, 0, 1024);
char buf[200];
short fehler = 0;
signaturLen = DSA_size(dsa);
fehler = !DSA_sign(0, hash, hashLen, signatur, &signaturLen, dsa);
if (fehler) {
  ps("FEHLER: signieren gescheitert");
  ps(ERR_error_string(ERR_get_error(), buf));
}

// do something with signatur

DSA_free(dsa);
}

and it worked as expected. how do I achieve this with golang? I tried

func (s SignConfig) ReadPrivateKey() (*rsa.PrivateKey, error) {
  b, e := ioutil.ReadFile(filepath.Join(core.ConfigDir(), s.PrivateKey))
  if e != nil {
    return nil, e
  }

  block, _ := pem.Decode(b)
  b, e = x509.DecryptPEMBlock(block, []byte(s.PassPhrase))
  priv, e := x509.ParsePKCS1PrivateKey(b)

  if e != nil {
    return nil, e
  }

  return priv, nil
}

to read the private key, but I got asn1.StructuralError{Msg:"integer too large"}