code: func (mgr *IdentityManager) CreateSigningIdentity(opts ...msp.SigningIdentityOption) (msp.SigningIdentity, error) {
  	opt := msp.IdentityOption{}
  	for _, param := range opts {
  		err := param(&opt)
  		if err != nil {
  			return nil, errors.WithMessage(err, "failed to create identity")
  		}
  	}
  	if opt.Cert == nil {
  		return nil, errors.New("missing certificate")
  	}
  	var privateKey core.Key
  	if opt.PrivateKey == nil {
  		pubKey, err := cryptoutil.GetPublicKeyFromCert(opt.Cert, mgr.cryptoSuite)
  		if err != nil {
  			return nil, errors.WithMessage(err, "fetching public key from cert failed")
  		}
  		privateKey, err = mgr.cryptoSuite.GetKey(pubKey.SKI())
  		if err != nil {
  			return nil, errors.WithMessage(err, "could not find matching key for SKI")
  		}
  	} else {
  		var err error
  		privateKey, err = fabricCaUtil.ImportBCCSPKeyFromPEMBytes(opt.PrivateKey, mgr.cryptoSuite, true)
  		if err != nil {
  			return nil, errors.WithMessage(err, "failed to import key")
  		}
  	}
  	return &User{
  		mspID:                 mgr.orgMSPID,
  		enrollmentCertificate: opt.Cert,
  		privateKey:            privateKey,
  	}, nil
  }
docs: // CreateSigningIdentity creates a signing identity with the given options