Skip to content

Commit 664ddb8

Browse files
committed
chore: simplifying generator code
1 parent e4dfe09 commit 664ddb8

File tree

6 files changed

+43
-112
lines changed

6 files changed

+43
-112
lines changed

component/generater/types.go

Lines changed: 0 additions & 97 deletions
This file was deleted.
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package generater
1+
package generator
22

33
import (
44
"encoding/base64"
@@ -22,20 +22,19 @@ func Main(args []string) {
2222
}
2323
fmt.Println(newUUID.String())
2424
case "reality-keypair":
25-
privateKey, err := GeneratePrivateKey()
25+
privateKey, err := GenX25519PrivateKey()
2626
if err != nil {
2727
panic(err)
2828
}
29-
publicKey := privateKey.PublicKey()
30-
fmt.Println("PrivateKey: " + base64.RawURLEncoding.EncodeToString(privateKey[:]))
31-
fmt.Println("PublicKey: " + base64.RawURLEncoding.EncodeToString(publicKey[:]))
29+
fmt.Println("PrivateKey: " + base64.RawURLEncoding.EncodeToString(privateKey.Bytes()))
30+
fmt.Println("PublicKey: " + base64.RawURLEncoding.EncodeToString(privateKey.PublicKey().Bytes()))
3231
case "wg-keypair":
33-
privateKey, err := GeneratePrivateKey()
32+
privateKey, err := GenX25519PrivateKey()
3433
if err != nil {
3534
panic(err)
3635
}
37-
fmt.Println("PrivateKey: " + privateKey.String())
38-
fmt.Println("PublicKey: " + privateKey.PublicKey().String())
36+
fmt.Println("PrivateKey: " + base64.StdEncoding.EncodeToString(privateKey.Bytes()))
37+
fmt.Println("PublicKey: " + base64.StdEncoding.EncodeToString(privateKey.PublicKey().Bytes()))
3938
case "ech-keypair":
4039
if len(args) < 2 {
4140
panic("Using: generate ech-keypair <plain_server_name>")

component/generator/x25519.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package generator
2+
3+
import (
4+
"crypto/ecdh"
5+
"crypto/rand"
6+
)
7+
8+
const X25519KeySize = 32
9+
10+
func GenX25519PrivateKey() (*ecdh.PrivateKey, error) {
11+
var privateKey [X25519KeySize]byte
12+
_, err := rand.Read(privateKey[:])
13+
if err != nil {
14+
return nil, err
15+
}
16+
17+
// Avoid generating equivalent X25519 private keys
18+
// https://github.com/XTLS/Xray-core/pull/1747
19+
//
20+
// Modify random bytes using algorithm described at:
21+
// https://cr.yp.to/ecdh.html.
22+
privateKey[0] &= 248
23+
privateKey[31] &= 127
24+
privateKey[31] |= 64
25+
26+
return ecdh.X25519().NewPrivateKey(privateKey[:])
27+
}

listener/inbound/common_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"github.com/metacubex/mihomo/component/ca"
2222
"github.com/metacubex/mihomo/component/dialer"
2323
"github.com/metacubex/mihomo/component/ech"
24-
"github.com/metacubex/mihomo/component/generater"
24+
"github.com/metacubex/mihomo/component/generator"
2525
tlsC "github.com/metacubex/mihomo/component/tls"
2626
C "github.com/metacubex/mihomo/constant"
2727

@@ -48,13 +48,12 @@ var echConfigBase64, echKeyPem, _ = ech.GenECHConfig(echPublicSni)
4848

4949
func init() {
5050
rand.Read(httpData)
51-
privateKey, err := generater.GeneratePrivateKey()
51+
privateKey, err := generator.GenX25519PrivateKey()
5252
if err != nil {
5353
panic(err)
5454
}
55-
publicKey := privateKey.PublicKey()
56-
realityPrivateKey = base64.RawURLEncoding.EncodeToString(privateKey[:])
57-
realityPublickey = base64.RawURLEncoding.EncodeToString(publicKey[:])
55+
realityPrivateKey = base64.RawURLEncoding.EncodeToString(privateKey.Bytes())
56+
realityPublickey = base64.RawURLEncoding.EncodeToString(privateKey.PublicKey().Bytes())
5857
}
5958

6059
type TestTunnel struct {

main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
"strings"
1515
"syscall"
1616

17-
"github.com/metacubex/mihomo/component/generater"
17+
"github.com/metacubex/mihomo/component/generator"
1818
"github.com/metacubex/mihomo/component/geodata"
1919
"github.com/metacubex/mihomo/component/updater"
2020
"github.com/metacubex/mihomo/config"
@@ -73,7 +73,7 @@ func main() {
7373
}
7474

7575
if len(os.Args) > 1 && os.Args[1] == "generate" {
76-
generater.Main(os.Args[2:])
76+
generator.Main(os.Args[2:])
7777
return
7878
}
7979

transport/vless/encryption/key.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ func GenX25519(privateKeyStr string) (privateKeyBase64, passwordBase64 string, e
5656
}
5757
}
5858

59+
// Avoid generating equivalent X25519 private keys
60+
// https://github.com/XTLS/Xray-core/pull/1747
61+
//
5962
// Modify random bytes using algorithm described at:
6063
// https://cr.yp.to/ecdh.html.
6164
privateKey[0] &= 248

0 commit comments

Comments
 (0)