Update proxy to Zhanlu v1.4.2 provider flow
The 1.4.2 extension replaced the old signed/encrypted chat gateway with an
OpenAI-compatible aigateway. Align the proxy with the new flow:
- Use ecloud.10086.cn login/model base URLs, zhanlu_ide plugin headers and
v1.4.2 plugin version
- Provision the model API key via SM2-signed get-or-create after v1/login
profile fetch; store api_key/model_base_url/email in credentials
- Chat via Bearer apiKey against {modelBaseUrl}/chat/completions with plain
OpenAI SSE passthrough; fetch /v1/models from the gateway model-info endpoint
- Force HTTP/1.1 upstream (gateway drops HTTP/2 ALPN negotiation with EOF)
- Drop obsolete AES body encryption, model name mapping and vscode headers
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"github.com/emmansun/gmsm/sm2"
|
||||
"github.com/emmansun/gmsm/sm3"
|
||||
)
|
||||
|
||||
// SignSM2Authorization signs `message` with the SM2 private key in hex form
|
||||
// (mirroring the Zhanlu plugin: SM3 digest signed with hash:false, der:false,
|
||||
// output as 64-byte r||s hex).
|
||||
func SignSM2Authorization(privateKeyHex, message string) (string, error) {
|
||||
keyHex := strings.TrimPrefix(strings.TrimSpace(privateKeyHex), "0x")
|
||||
keyBytes, err := hex.DecodeString(keyHex)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
priv, err := sm2.NewPrivateKey(keyBytes)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
digest := sm3.Sum([]byte(message))
|
||||
r, s, err := sm2.Sign(rand.Reader, &priv.PrivateKey, digest[:])
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
rb := r.FillBytes(make([]byte, 32))
|
||||
sb := s.FillBytes(make([]byte, 32))
|
||||
return hex.EncodeToString(append(rb, sb...)), nil
|
||||
}
|
||||
|
||||
var errEmptySM2Key = errors.New("SM2 private key is required")
|
||||
Reference in New Issue
Block a user