Merge pull request #869 from xhawk18/master

bug fixed: no fixed order in map may cause GeneratePrivateKey error
This commit is contained in:
Zhi Guan
2020-06-19 18:25:08 +08:00
committed by GitHub
2 changed files with 19 additions and 9 deletions

View File

@@ -667,11 +667,13 @@ type PrivateKey struct {
pkey *C.EVP_PKEY pkey *C.EVP_PKEY
} }
func GeneratePrivateKey(alg string, args map[string]string, eng *Engine) (*PrivateKey, error) { func GeneratePrivateKey(alg string, args [][2]string, eng *Engine) (*PrivateKey, error) {
calg := C.CString(alg) calg := C.CString(alg)
defer C.free(unsafe.Pointer(calg)) defer C.free(unsafe.Pointer(calg))
ctx := C.new_pkey_keygen_ctx(calg, nil) ctx := C.new_pkey_keygen_ctx(calg, nil)
defer C.EVP_PKEY_CTX_free(ctx)
/* /*
if eng != nil { if eng != nil {
ctx := C.new_pkey_keygen_ctx(calg, eng.engine) ctx := C.new_pkey_keygen_ctx(calg, eng.engine)
@@ -688,7 +690,9 @@ func GeneratePrivateKey(alg string, args map[string]string, eng *Engine) (*Priva
if 1 != C.EVP_PKEY_paramgen_init(ctx) { if 1 != C.EVP_PKEY_paramgen_init(ctx) {
return nil, GetErrors() return nil, GetErrors()
} }
for name, value := range args { for _, arg := range args {
name := arg[0]
value := arg[1]
cname := C.CString(name) cname := C.CString(name)
defer C.free(unsafe.Pointer(cname)) defer C.free(unsafe.Pointer(cname))
cvalue := C.CString(value) cvalue := C.CString(value)
@@ -712,7 +716,9 @@ func GeneratePrivateKey(alg string, args map[string]string, eng *Engine) (*Priva
return nil, GetErrors() return nil, GetErrors()
} }
for name, value := range args { for _, arg := range args {
name := arg[0]
value := arg[1]
cname := C.CString(name) cname := C.CString(name)
defer C.free(unsafe.Pointer(cname)) defer C.free(unsafe.Pointer(cname))
cvalue := C.CString(value) cvalue := C.CString(value)
@@ -886,6 +892,7 @@ func (pk *PublicKey) Encrypt(alg string, in []byte, eng *Engine) ([]byte, error)
if out == nil { if out == nil {
return nil, GetErrors() return nil, GetErrors()
} }
defer C.free(unsafe.Pointer(out))
return C.GoBytes(unsafe.Pointer(out), C.int(outlen)), nil return C.GoBytes(unsafe.Pointer(out), C.int(outlen)), nil
} }
@@ -898,6 +905,7 @@ func (sk *PrivateKey) Decrypt(alg string, in []byte, eng *Engine) ([]byte, error
if out == nil { if out == nil {
return nil, GetErrors() return nil, GetErrors()
} }
defer C.free(unsafe.Pointer(out))
return C.GoBytes(unsafe.Pointer(out), C.int(outlen)), nil return C.GoBytes(unsafe.Pointer(out), C.int(outlen)), nil
} }
@@ -911,6 +919,7 @@ func (sk *PrivateKey) Sign(alg string, dgst []byte, eng *Engine) ([]byte, error)
C.ERR_print_errors_fp(C.stderr) C.ERR_print_errors_fp(C.stderr)
return nil, GetErrors() return nil, GetErrors()
} }
defer C.free(unsafe.Pointer(sig))
return C.GoBytes(unsafe.Pointer(sig), C.int(siglen)), nil return C.GoBytes(unsafe.Pointer(sig), C.int(siglen)), nil
} }
@@ -934,6 +943,7 @@ func (sk *PrivateKey) DeriveKey(alg string, peer PublicKey, eng *Engine) ([]byte
if key == nil { if key == nil {
return nil, GetErrors() return nil, GetErrors()
} }
defer C.free(unsafe.Pointer(key))
return C.GoBytes(unsafe.Pointer(key), C.int(keylen)), nil return C.GoBytes(unsafe.Pointer(key), C.int(keylen)), nil
} }

View File

@@ -149,9 +149,9 @@ func main() {
fmt.Println() fmt.Println()
/* private key */ /* private key */
rsa_args := map[string]string { rsa_args := [][2]string{
"rsa_keygen_bits": "2048", {"rsa_keygen_bits", "2048"},
"rsa_keygen_pubexp" : "65537", {"rsa_keygen_pubexp", "65537"},
} }
rsa, err := gmssl.GeneratePrivateKey("RSA", rsa_args, nil) rsa, err := gmssl.GeneratePrivateKey("RSA", rsa_args, nil)
@@ -175,9 +175,9 @@ func main() {
fmt.Println() fmt.Println()
/* SM2 key pair operations */ /* SM2 key pair operations */
sm2keygenargs := map[string]string { sm2keygenargs := [][2]string{
"ec_paramgen_curve": "sm2p256v1", {"ec_paramgen_curve", "sm2p256v1"},
"ec_param_enc": "named_curve", {"ec_param_enc", "named_curve"},
} }
sm2sk, _ := gmssl.GeneratePrivateKey("EC", sm2keygenargs, nil) sm2sk, _ := gmssl.GeneratePrivateKey("EC", sm2keygenargs, nil)
sm2sktxt, _ := sm2sk.GetText() sm2sktxt, _ := sm2sk.GetText()