| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package trojan
- import (
- "crypto/sha256"
- "encoding/hex"
- "fmt"
- "google.golang.org/protobuf/proto"
- "github.com/xtls/xray-core/common"
- "github.com/xtls/xray-core/common/protocol"
- )
- // MemoryAccount is an account type converted from Account.
- type MemoryAccount struct {
- Password string
- Key []byte
- }
- // AsAccount implements protocol.AsAccount.
- func (a *Account) AsAccount() (protocol.Account, error) {
- password := a.GetPassword()
- key := hexSha224(password)
- return &MemoryAccount{
- Password: password,
- Key: key,
- }, nil
- }
- // Equals implements protocol.Account.Equals().
- func (a *MemoryAccount) Equals(another protocol.Account) bool {
- if account, ok := another.(*MemoryAccount); ok {
- return a.Password == account.Password
- }
- return false
- }
- func (a *MemoryAccount) ToProto() proto.Message {
- return &Account{
- Password: a.Password,
- }
- }
- func hexSha224(password string) []byte {
- buf := make([]byte, 56)
- hash := sha256.New224()
- common.Must2(hash.Write([]byte(password)))
- hex.Encode(buf, hash.Sum(nil))
- return buf
- }
- func hexString(data []byte) string {
- str := ""
- for _, v := range data {
- str += fmt.Sprintf("%02x", v)
- }
- return str
- }
|