summaryrefslogtreecommitdiff
path: root/pkg/onionkey
diff options
context:
space:
mode:
authorJames Mills <prologic@shortcircuit.net.au>2020-03-21 09:55:06 +1000
committerJames Mills <prologic@shortcircuit.net.au>2020-03-21 09:55:06 +1000
commit4dae45a68ff1ff32a251a5835b2a2723ae125d1c (patch)
treeb3abe641f39f50ac444aee2bb617d7b4ab44187d /pkg/onionkey
parent76fa613b7eaf1c8626d2a51901c623af7bf1a665 (diff)
Restructured source code layout, Added rice support for templates and static assets
Diffstat (limited to 'pkg/onionkey')
-rw-r--r--pkg/onionkey/key.go24
-rw-r--r--pkg/onionkey/v3.go78
2 files changed, 0 insertions, 102 deletions
diff --git a/pkg/onionkey/key.go b/pkg/onionkey/key.go
deleted file mode 100644
index b91d43a..0000000
--- a/pkg/onionkey/key.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// Package onionkey manages onion service key generation, serialization, and
-// service ID calculation. Currently only supports version 3 onions.
-package onionkey
-
-import (
- "github.com/wybiral/torgo"
-)
-
-// Key is generic interface type for Tor onion keys.
-type Key interface {
- WriteFile(path string) error
- Onion() (*torgo.Onion, error)
- ServiceID() string
-}
-
-// GenerateKey generates a Tor onion key.
-func GenerateKey() (Key, error) {
- return generateV3()
-}
-
-// ReadFile reads a Tor onion key from file path.
-func ReadFile(path string) (Key, error) {
- return readV3(path)
-}
diff --git a/pkg/onionkey/v3.go b/pkg/onionkey/v3.go
deleted file mode 100644
index cbd6c73..0000000
--- a/pkg/onionkey/v3.go
+++ /dev/null
@@ -1,78 +0,0 @@
-// Implements Tor v3 onion key based on ed25519.
-
-package onionkey
-
-import (
- "crypto/rand"
- "encoding/base32"
- "encoding/base64"
- "errors"
- "io/ioutil"
- "os"
- "strings"
-
- "github.com/wybiral/torgo"
- "golang.org/x/crypto/ed25519"
- "golang.org/x/crypto/sha3"
-)
-
-type v3Key ed25519.PrivateKey
-
-func generateV3() (v3Key, error) {
- _, key, err := ed25519.GenerateKey(rand.Reader)
- return v3Key(key), err
-}
-
-func readV3(path string) (v3Key, error) {
- raw, err := ioutil.ReadFile(path)
- if err != nil {
- return nil, err
- }
- pk := strings.TrimSpace(string(raw))
- parts := strings.SplitN(pk, ":", 2)
- if parts[0] != "v3" {
- return nil, errors.New("Invalid key type")
- }
- seed, err := base64.StdEncoding.DecodeString(parts[1])
- if err != nil {
- return nil, err
- }
- key := ed25519.NewKeyFromSeed(seed)
- return v3Key(key), nil
-}
-
-func (k v3Key) Onion() (*torgo.Onion, error) {
- return torgo.OnionFromEd25519(ed25519.PrivateKey(k))
-}
-
-func (k v3Key) WriteFile(path string) error {
- seed := ed25519.PrivateKey(k).Seed()
- b64 := base64.StdEncoding.EncodeToString(seed)
- f, err := os.Create(path)
- if err != nil {
- return err
- }
- defer f.Close()
- _, err = f.WriteString("v3:" + b64)
- if err != nil {
- return err
- }
- return nil
-}
-
-func (k v3Key) ServiceID() string {
- // Get ed25519 public key
- pub := ed25519.PrivateKey(k).Public().(ed25519.PublicKey)
- // Calculate check digits
- checkstr := []byte(".onion checksum")
- checkstr = append(checkstr, pub...)
- checkstr = append(checkstr, 0x03)
- checksum := sha3.Sum256(checkstr)
- checkdigits := checksum[:2]
- // Calculate service ID
- combined := pub[:]
- combined = append(combined, checkdigits...)
- combined = append(combined, 0x03)
- serviceID := base32.StdEncoding.EncodeToString(combined)
- return strings.ToLower(serviceID)
-}