-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsam3.go
91 lines (81 loc) · 2.42 KB
/
sam3.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// package sam3 wraps the original sam3 API from github.com/go-i2p/sam3
package sam3
import (
"math/rand"
"github.com/go-i2p/go-sam-go/common"
"github.com/go-i2p/go-sam-go/datagram"
"github.com/go-i2p/go-sam-go/primary"
"github.com/go-i2p/go-sam-go/stream"
"github.com/go-i2p/i2pkeys"
)
// Used for controlling I2Ps SAMv3.
type SAM struct {
*common.SAM
}
// Creates a new stream session by wrapping stream.NewStreamSession
func (s *SAM) NewStreamSession(param1 string, keys i2pkeys.I2PKeys, param3 []string) (*StreamSession, error) {
sam := &stream.SAM{
SAM: s.SAM,
}
ss, err := sam.NewStreamSession(param1, keys, param3)
if err != nil {
return nil, err
}
streamSession := &StreamSession{
StreamSession: ss,
}
return streamSession, nil
}
// Creates a new Datagram session by wrapping datagram.NewDatagramSession
func (s *SAM) NewDatagramSession(id string, keys i2pkeys.I2PKeys, options []string, port int) (*DatagramSession, error) {
sam := datagram.SAM(*s.SAM)
dgs, err := sam.NewDatagramSession(id, keys, options, port)
if err != nil {
return nil, err
}
datagramSession := DatagramSession{
DatagramSession: *dgs,
}
return &datagramSession, nil
}
func (s *SAM) NewPrimarySession(id string, keys i2pkeys.I2PKeys, options []string) (*PrimarySession, error) {
sam := primary.SAM(*s.SAM)
ps, err := sam.NewPrimarySession(id, keys, options)
if err != nil {
return nil, err
}
primarySession := PrimarySession{
PrimarySession: ps,
}
return &primarySession, nil
}
const (
Sig_NONE = "SIGNATURE_TYPE=EdDSA_SHA512_Ed25519"
Sig_DSA_SHA1 = "SIGNATURE_TYPE=DSA_SHA1"
Sig_ECDSA_SHA256_P256 = "SIGNATURE_TYPE=ECDSA_SHA256_P256"
Sig_ECDSA_SHA384_P384 = "SIGNATURE_TYPE=ECDSA_SHA384_P384"
Sig_ECDSA_SHA512_P521 = "SIGNATURE_TYPE=ECDSA_SHA512_P521"
Sig_EdDSA_SHA512_Ed25519 = "SIGNATURE_TYPE=EdDSA_SHA512_Ed25519"
)
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
func RandString() string {
n := 4
b := make([]rune, n)
for i := range b {
b[i] = letters[rand.Intn(len(letters))]
}
log.WithField("randomString", string(b)).Debug("Generated random string")
return string(b)
}
// Creates a new controller for the I2P routers SAM bridge.
func NewSAM(address string) (*SAM, error) {
is, err := common.NewSAM(address)
if err != nil {
log.WithError(err).Error("Failed to create new SAM instance")
return nil, err
}
s := &SAM{
SAM: is,
}
return s, nil
}