Documentation
¶
Index ¶
- func BuildHandshakeRequest(clientPriv *ec.PrivateKey, serverPub *ec.PublicKey, salt string, nonce string) (body string, headers map[string]string, err error)
- func CreateToken(payload map[string]any, priv *ec.PrivateKey, expSec int64) (string, error)
- func VerifyHandshakeRequest(body, method, uriPath string, headers map[string]string, ...) (*ec.PublicKey, string, string, error)
- func VerifyToken(token string, pub *ec.PublicKey) (map[string]any, error)
- type BitSealWSConn
- type Server
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func BuildHandshakeRequest ¶
func BuildHandshakeRequest(clientPriv *ec.PrivateKey, serverPub *ec.PublicKey, salt string, nonce string) (body string, headers map[string]string, err error)
BuildHandshakeRequest constructs body+headers like TS side.
func CreateToken ¶
CreateToken builds payload JSON, adds iat/exp, signs SHA256(payload) with secp256k1 ECDSA. Returns base64url(payload) + "." + base64url(signatureDER)
Types ¶
type BitSealWSConn ¶
type BitSealWSConn struct { Conn *websocket.Conn Session *rtc.Session // Extra 保存服务器握手响应中除 token/salt_s/ts/nonce 之外的所有字段, // 对应服务端 OnHandshakeResponse 注入的自定义数据。 Extra map[string]any // OnMessage 若非 nil,则 Serve/ServeAsync 解包明文后调用; // 返回值非 nil ⇒ 自动 Encode + 发送; OnMessage func(sess *rtc.Session, plain []byte) ([]byte, error) }
BitSealWSConn 封装了 x/net/websocket.Conn,并在读写时自动进行 BST2 编解码。 发送方需先 EncodeRecord,接收方需 DecodeRecord,本结构体内部自动处理。
func ConnectBitSealWS ¶
func ConnectBitSealWS(clientPriv *ec.PrivateKey, serverPub *ec.PublicKey, wsURL string) (*BitSealWSConn, error)
ConnectBitSealWS 完成客户端两步握手并建立 BST2 会话,返回包装后的连接。
- HTTP POST /ws/handshake – BitSeal-WEB 签名请求
- WebSocket Upgrade /ws/socket – 子协议携带 SimpleToken
wsURL 形如 wss://host/ws/socket
func (*BitSealWSConn) Serve ¶ added in v0.2.1
func (c *BitSealWSConn) Serve()
Serve 在当前 goroutine 中持续读取并分发消息,直到 Read 返回错误或连接关闭。 若设置了 OnMessage,则自动调用并根据返回值决定是否回复。
func (*BitSealWSConn) ServeAsync ¶ added in v0.2.1
func (c *BitSealWSConn) ServeAsync()
ServeAsync 在新 goroutine 中调用 Serve。
type Server ¶
type Server struct { // OnMessage 为业务回调;若不为 nil,则在收到每条消息后调用以生成响应明文。 // 回调返回的明文会再次加密后发回客户端;若返回 nil 则表示不需要回复。 // 若 OnMessage 本身为 nil,则 Server 默认回显收到的明文(兼容旧逻辑)。 OnMessage func(sess *rtc.Session, plain []byte) ([]byte, error) // OnSession 会在成功与客户端建立 BST2 会话后立即调用, // 以便业务层获取 Session(例如存入连接表、提取 peerPub 等)。 // 如不需要可保持为 nil。 OnSession func(sess *rtc.Session) // OnHandshakeResponse 允许业务层在握手阶段向返回给客户端的 JSON // 中添加额外的键值对。若回调返回的 map 不为 nil,则其中的所有键值对 // 将被合并进默认的 respObj 中;若键已存在则以回调结果为准。 // 典型用法是在创建 Server 后赋值,例如: // srv.OnHandshakeResponse = func(r *http.Request, clientPub *ec.PublicKey, nonce string) map[string]any { // return map[string]any{"welcome": "hello"} // } OnHandshakeResponse func(r *http.Request, clientPub *ec.PublicKey, nonce string) map[string]any // contains filtered or unexported fields }
Server bundles server private key and an in-memory map for pending sessions.
func NewServer ¶
func NewServer(priv *ec.PrivateKey, logger *zap.Logger) *Server
NewServer creates a new BitSeal-WS server with its own ServeMux. If logger is nil, the server remains silent.