mirror of https://github.com/XTLS/Xray-core
Browse Source
* Command: Add `wg` for wireguard key generation * Command: Merge `x25519` and `wg`pull/2805/head
チセ
12 months ago
committed by
GitHub
4 changed files with 87 additions and 53 deletions
@ -0,0 +1,57 @@
|
||||
package all |
||||
|
||||
import ( |
||||
"crypto/rand" |
||||
"encoding/base64" |
||||
"fmt" |
||||
|
||||
"golang.org/x/crypto/curve25519" |
||||
) |
||||
|
||||
func Curve25519Genkey(StdEncoding bool, input_base64 string) { |
||||
var output string |
||||
var err error |
||||
var privateKey, publicKey []byte |
||||
var encoding *base64.Encoding |
||||
if *input_stdEncoding || StdEncoding { |
||||
encoding = base64.StdEncoding |
||||
} else { |
||||
encoding = base64.RawURLEncoding |
||||
} |
||||
|
||||
if len(input_base64) > 0 { |
||||
privateKey, err = encoding.DecodeString(input_base64) |
||||
if err != nil { |
||||
output = err.Error() |
||||
goto out |
||||
} |
||||
if len(privateKey) != curve25519.ScalarSize { |
||||
output = "Invalid length of private key." |
||||
goto out |
||||
} |
||||
} |
||||
|
||||
if privateKey == nil { |
||||
privateKey = make([]byte, curve25519.ScalarSize) |
||||
if _, err = rand.Read(privateKey); err != nil { |
||||
output = err.Error() |
||||
goto out |
||||
} |
||||
} |
||||
|
||||
// Modify random bytes using algorithm described at:
|
||||
// https://cr.yp.to/ecdh.html.
|
||||
privateKey[0] &= 248 |
||||
privateKey[31] &= 127 | 64 |
||||
|
||||
if publicKey, err = curve25519.X25519(privateKey, curve25519.Basepoint); err != nil { |
||||
output = err.Error() |
||||
goto out |
||||
} |
||||
|
||||
output = fmt.Sprintf("Private key: %v\nPublic key: %v", |
||||
encoding.EncodeToString(privateKey), |
||||
encoding.EncodeToString(publicKey)) |
||||
out: |
||||
fmt.Println(output) |
||||
} |
@ -0,0 +1,27 @@
|
||||
package all |
||||
|
||||
import ( |
||||
"github.com/xtls/xray-core/main/commands/base" |
||||
) |
||||
|
||||
var cmdWG = &base.Command{ |
||||
UsageLine: `{{.Exec}} wg [-i "private key (base64.StdEncoding)"]`, |
||||
Short: `Generate key pair for wireguard key exchange`, |
||||
Long: ` |
||||
Generate key pair for wireguard key exchange. |
||||
|
||||
Random: {{.Exec}} wg |
||||
|
||||
From private key: {{.Exec}} wg -i "private key (base64.StdEncoding)" |
||||
`, |
||||
} |
||||
|
||||
func init() { |
||||
cmdWG.Run = executeWG // break init loop
|
||||
} |
||||
|
||||
var input_wireguard = cmdWG.Flag.String("i", "", "") |
||||
|
||||
func executeWG(cmd *base.Command, args []string) { |
||||
Curve25519Genkey(true, *input_wireguard) |
||||
} |
Loading…
Reference in new issue