Skip to content

Commit 6d41904

Browse files
authored
Merge pull request #78 from microsoft/dsa3
Simplify GenerateKeyDSA
2 parents 550ad80 + 323bb1e commit 6d41904

File tree

2 files changed

+23
-25
lines changed

2 files changed

+23
-25
lines changed

cng/dsa.go

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ func (p DSAParameters) groupSize() uint32 {
6161
return uint32(len(p.Q))
6262
}
6363

64-
// GenerateDSAParameters generates a set of DSA parameters for a key of size L bytes.
64+
// GenerateParametersDSA generates a set of DSA parameters for a key of size L bytes.
6565
// If L is less than or equal to 1024, the parameters are generated according to FIPS 186-2.
6666
// If L is greater than 1024, the parameters are generated according to FIPS 186-3.
6767
// The returned parameters are suitable for use in GenerateKey.
68-
func GenerateDSAParameters(L int) (params DSAParameters, err error) {
68+
func GenerateParametersDSA(L int) (params DSAParameters, err error) {
6969
h, err := loadDSA()
7070
if err != nil {
7171
return DSAParameters{}, err
@@ -113,35 +113,31 @@ func (k *PublicKeyDSA) finalize() {
113113
}
114114

115115
// GenerateKeyDSA generates a new private DSA key using the given parameters.
116-
func GenerateKeyDSA(params DSAParameters) (*PrivateKeyDSA, error) {
116+
func GenerateKeyDSA(params DSAParameters) (x, y BigInt, err error) {
117117
h, err := loadDSA()
118118
if err != nil {
119-
return nil, err
119+
return nil, nil, err
120120
}
121121
keySize := params.keySize()
122122
if !keyIsAllowed(h.allowedKeyLengths, keySize*8) {
123-
return nil, errors.New("crypto/dsa: invalid key size")
123+
return nil, nil, errors.New("crypto/dsa: invalid key size")
124124
}
125125
var hkey bcrypt.KEY_HANDLE
126126
if err := bcrypt.GenerateKeyPair(h.handle, &hkey, keySize*8, 0); err != nil {
127-
return nil, err
127+
return nil, nil, err
128128
}
129+
defer bcrypt.DestroyKey(hkey)
129130
if err := setDSAParameter(hkey, params); err != nil {
130-
bcrypt.DestroyKey(hkey)
131-
return nil, err
131+
return nil, nil, err
132132
}
133133
if err := bcrypt.FinalizeKeyPair(hkey, 0); err != nil {
134-
bcrypt.DestroyKey(hkey)
135-
return nil, err
134+
return nil, nil, err
136135
}
137-
_, x, y, err := decodeDSAKey(hkey, true)
136+
_, x, y, err = decodeDSAKey(hkey, true)
138137
if err != nil {
139-
bcrypt.DestroyKey(hkey)
140-
return nil, err
138+
return nil, nil, err
141139
}
142-
k := &PrivateKeyDSA{params, x, y, hkey}
143-
runtime.SetFinalizer(k, (*PrivateKeyDSA).finalize)
144-
return k, nil
140+
return x, y, nil
145141
}
146142

147143
// NewPrivateKeyDSA creates a new DSA private key from the given parameters.

cng/dsa_test.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ import (
1616
)
1717

1818
func TestDSAGenerateParameters(t *testing.T) {
19-
testGenerateDSAParameters(t, 1024, 160)
20-
testGenerateDSAParameters(t, 2048, 256)
21-
testGenerateDSAParameters(t, 3072, 256)
19+
testGenerateParametersDSA(t, 1024, 160)
20+
testGenerateParametersDSA(t, 2048, 256)
21+
testGenerateParametersDSA(t, 3072, 256)
2222
}
2323

24-
func testGenerateDSAParameters(t *testing.T, L, N int) {
25-
params, err := cng.GenerateDSAParameters(L)
24+
func testGenerateParametersDSA(t *testing.T, L, N int) {
25+
params, err := cng.GenerateParametersDSA(L)
2626
if err != nil {
2727
t.Errorf("%d-%d: error generating parameters: %s", L, N, err)
2828
return
@@ -47,17 +47,19 @@ func testGenerateDSAParameters(t *testing.T, L, N int) {
4747
if rem.Sign() != 0 {
4848
t.Errorf("%d-%d: p-1 mod q != 0", L, N)
4949
}
50-
x := new(big.Int).Exp(G, quo, P)
51-
if x.Cmp(one) == 0 {
50+
if x := new(big.Int).Exp(G, quo, P); x.Cmp(one) == 0 {
5251
t.Errorf("%d-%d: invalid generator", L, N)
5352
}
5453

55-
priv, err := cng.GenerateKeyDSA(params)
54+
x, y, err := cng.GenerateKeyDSA(params)
5655
if err != nil {
5756
t.Errorf("error generating key: %s", err)
5857
return
5958
}
60-
59+
priv, err := cng.NewPrivateKeyDSA(params, x, y)
60+
if err != nil {
61+
t.Errorf("error creating key: %s", err)
62+
}
6163
testDSASignAndVerify(t, L, priv)
6264
}
6365

0 commit comments

Comments
 (0)