@@ -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.
0 commit comments