// generate a dsa keypair func generateDSA(priv *dsa.PrivateKey, rand io.Reader) error { // put our paramters in priv.P = param.P priv.Q = param.Q priv.G = param.G // generate the keypair return dsa.GenerateKey(priv, rand) }
func readPrivateKeyDSA(m map[string]string) (PrivateKey, error) { p := new(dsa.PrivateKey) p.X = big.NewInt(0) for k, v := range m { switch k { case "private_value(x)": v1, err := fromBase64([]byte(v)) if err != nil { return nil, err } p.X.SetBytes(v1) case "created", "publish", "activate": /* not used in Go (yet) */ } } return p, nil }
func assignParameter(k *dsa.PrivateKey, s string, v *big.Int) bool { switch s { case "g": k.G = v case "p": k.P = v case "q": k.Q = v case "x": k.X = v case "y": k.Y = v default: return false } return true }
func (pk *PrivateKey) parseDSAPrivateKey(data []byte) (err os.Error) { dsaPub := pk.PublicKey.PublicKey.(*dsa.PublicKey) dsaPriv := new(dsa.PrivateKey) dsaPriv.PublicKey = *dsaPub buf := bytes.NewBuffer(data) x, _, err := readMPI(buf) if err != nil { return } dsaPriv.X = new(big.Int).SetBytes(x) pk.PrivateKey = dsaPriv pk.Encrypted = false pk.encryptedData = nil return nil }