@@ -60,8 +60,8 @@ func (k *PublicKeyDSA) withKey(f func(C.GO_EVP_PKEY_PTR) C.int) C.int {
60
60
return f (k ._pkey )
61
61
}
62
62
63
- // GenerateDSAParameters generates a set of DSA parameters.
64
- func GenerateDSAParameters (l , n int ) (DSAParameters , error ) {
63
+ // GenerateParametersDSA generates a set of DSA parameters.
64
+ func GenerateParametersDSA (l , n int ) (DSAParameters , error ) {
65
65
// The DSA parameters are generated by creating a new DSA key and
66
66
// extracting the domain parameters from it.
67
67
@@ -147,35 +147,34 @@ func NewPublicKeyDSA(params DSAParameters, y BigInt) (*PublicKeyDSA, error) {
147
147
}
148
148
149
149
// GenerateKeyDSA generates a new private DSA key using the given parameters.
150
- func GenerateKeyDSA (params DSAParameters ) (* PrivateKeyDSA , error ) {
150
+ func GenerateKeyDSA (params DSAParameters ) (x , y BigInt , err error ) {
151
151
pkey , err := newDSA (params , nil , nil )
152
152
if err != nil {
153
- return nil , err
153
+ return nil , nil , err
154
154
}
155
- var x , y C.GO_BIGNUM_PTR
155
+ defer C .go_openssl_EVP_PKEY_free (pkey )
156
+ var bx , by C.GO_BIGNUM_PTR
156
157
switch vMajor {
157
158
case 1 :
158
159
dsa := getDSA (pkey )
159
160
if vMinor == 0 {
160
- C .go_openssl_DSA_get0_key_backport (dsa , & y , & x )
161
+ C .go_openssl_DSA_get0_key_backport (dsa , & by , & bx )
161
162
} else {
162
- C .go_openssl_DSA_get0_key (dsa , & y , & x )
163
+ C .go_openssl_DSA_get0_key (dsa , & by , & bx )
163
164
}
164
165
case 3 :
165
166
defer func () {
166
- C .go_openssl_BN_clear_free (x )
167
- C .go_openssl_BN_free (y )
167
+ C .go_openssl_BN_clear_free (bx )
168
+ C .go_openssl_BN_free (by )
168
169
}()
169
- if C .go_openssl_EVP_PKEY_get_bn_param (pkey , _OSSL_PKEY_PARAM_PUB_KEY , & y ) != 1 ||
170
- C .go_openssl_EVP_PKEY_get_bn_param (pkey , _OSSL_PKEY_PARAM_PRIV_KEY , & x ) != 1 {
171
- return nil , newOpenSSLError ("EVP_PKEY_get_bn_param" )
170
+ if C .go_openssl_EVP_PKEY_get_bn_param (pkey , _OSSL_PKEY_PARAM_PUB_KEY , & by ) != 1 ||
171
+ C .go_openssl_EVP_PKEY_get_bn_param (pkey , _OSSL_PKEY_PARAM_PRIV_KEY , & bx ) != 1 {
172
+ return nil , nil , newOpenSSLError ("EVP_PKEY_get_bn_param" )
172
173
}
173
174
default :
174
175
panic (errUnsupportedVersion ())
175
176
}
176
- k := & PrivateKeyDSA {params , bnToBig (x ), bnToBig (y ), pkey }
177
- runtime .SetFinalizer (k , (* PrivateKeyDSA ).finalize )
178
- return k , nil
177
+ return bnToBig (bx ), bnToBig (by ), nil
179
178
}
180
179
181
180
// SignDSA signs a hash (which should be the result of hashing a larger message).
0 commit comments