Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
197aca0ece | ||
![]() |
fff37dbffa | ||
![]() |
dfd7cd886f | ||
![]() |
c998e57a89 | ||
![]() |
41317685c5 | ||
![]() |
56cca2e537 | ||
![]() |
9ca67baa32 |
2
Makefile
2
Makefile
@@ -1,6 +1,6 @@
|
||||
|
||||
USER_GH=eyedeekay
|
||||
VERSION=0.33.3
|
||||
VERSION=0.33.5
|
||||
packagename=sam3
|
||||
|
||||
echo:
|
||||
|
@@ -10,6 +10,8 @@ before upgrading your sam3 dependencies. You can probably do this by running:
|
||||
find . -name '*.go' -exec sed -i 's|github.com/eyedeekay/sam3/i2pkeys|github.com/eyedeekay/i2pkeys|g' {} \;
|
||||
```
|
||||
|
||||
STATUS: This project is maintained. I will respond to issues, pull requests, and feature requests within a few days.
|
||||
|
||||
# README #
|
||||
|
||||
go library for the I2P [SAMv3.0](https://geti2p.net/en/docs/api/samv3) bridge, used to build anonymous/pseudonymous end-to-end encrypted sockets.
|
||||
|
55
index.html
55
index.html
@@ -7,6 +7,7 @@
|
||||
<meta name="description" content="sam3" />
|
||||
<meta name="keywords" content="master" />
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
<link rel="stylesheet" type="text/css" href="showhider.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="navbar">
|
||||
@@ -30,19 +31,23 @@
|
||||
</div>
|
||||
</div>
|
||||
<h1>
|
||||
<a href="/">
|
||||
README
|
||||
<a href="#readme" rel="nofollow">
|
||||
<span></span>
|
||||
</a>
|
||||
README
|
||||
</h1>
|
||||
<h2>
|
||||
<a href="#important" rel="nofollow">
|
||||
<span></span>
|
||||
</a>
|
||||
!!IMPORTANT!!
|
||||
</h2>
|
||||
<p>
|
||||
In the next version, I’ll be moving the
|
||||
In the next version, I'll be moving the
|
||||
<code>
|
||||
i2pkeys
|
||||
</code>
|
||||
directory to it’s own repository
|
||||
directory to it's own repository
|
||||
so I can avoid import cycle headaches. Please migrate to the new
|
||||
<code>
|
||||
i2pkeys
|
||||
@@ -50,9 +55,17 @@
|
||||
repository
|
||||
before upgrading your sam3 dependencies. You can probably do this by running:
|
||||
</p>
|
||||
<pre><code>find . -name '*.go' -exec sed -i 's|github.com/eyedeekay/sam3/i2pkeys|github.com/eyedeekay/i2pkeys|g' {} \;
|
||||
</code></pre>
|
||||
<div>
|
||||
<pre>find . -name '*.go' -exec sed -i 's|github.com/eyedeekay/sam3/i2pkeys|github.com/eyedeekay/i2pkeys|g' {} \;
|
||||
</pre>
|
||||
</div>
|
||||
<p>
|
||||
STATUS: This project is maintained. I will respond to issues, pull requests, and feature requests within a few days.
|
||||
</p>
|
||||
<h1>
|
||||
<a href="#readme" rel="nofollow">
|
||||
<span></span>
|
||||
</a>
|
||||
README
|
||||
</h1>
|
||||
<p>
|
||||
@@ -66,6 +79,9 @@
|
||||
This library is much better than ccondom (that use BOB), much more stable and much easier to maintain.
|
||||
</p>
|
||||
<h2>
|
||||
<a href="#support-todo" rel="nofollow">
|
||||
<span></span>
|
||||
</a>
|
||||
Support/TODO
|
||||
</h2>
|
||||
<p>
|
||||
@@ -133,6 +149,9 @@
|
||||
</li>
|
||||
</ul>
|
||||
<h2>
|
||||
<a href="#documentation" rel="nofollow">
|
||||
<span></span>
|
||||
</a>
|
||||
Documentation
|
||||
</h2>
|
||||
<ul>
|
||||
@@ -160,9 +179,13 @@
|
||||
</li>
|
||||
</ul>
|
||||
<h2>
|
||||
<a href="#examples" rel="nofollow">
|
||||
<span></span>
|
||||
</a>
|
||||
Examples
|
||||
</h2>
|
||||
<pre><code>package main
|
||||
<div>
|
||||
<pre>package main
|
||||
|
||||
import (
|
||||
"github.com/eyedeekay/sam3"
|
||||
@@ -193,17 +216,23 @@ func main() {
|
||||
n, _ := conn.Read(buf)
|
||||
fmt.Println("Server received: " + string(buf[:n]))
|
||||
}
|
||||
</code></pre>
|
||||
</pre>
|
||||
</div>
|
||||
<p>
|
||||
The above will write to the terminal:
|
||||
</p>
|
||||
<pre><code>Client: Connecting to zjnvfh4hs3et5vtz35ogwzrws26zvwkcad5uo5esecvg4qpk5b4a.b32.i2p
|
||||
<div>
|
||||
<pre>Client: Connecting to zjnvfh4hs3et5vtz35ogwzrws26zvwkcad5uo5esecvg4qpk5b4a.b32.i2p
|
||||
Server received: Hello world!
|
||||
</code></pre>
|
||||
</pre>
|
||||
</div>
|
||||
<p>
|
||||
Error handling was omitted in the above code for readability.
|
||||
</p>
|
||||
<h2>
|
||||
<a href="#testing" rel="nofollow">
|
||||
<span></span>
|
||||
</a>
|
||||
Testing
|
||||
</h2>
|
||||
<ul>
|
||||
@@ -221,12 +250,18 @@ Server received: Hello world!
|
||||
</li>
|
||||
</ul>
|
||||
<h2>
|
||||
<a href="#license" rel="nofollow">
|
||||
<span></span>
|
||||
</a>
|
||||
License
|
||||
</h2>
|
||||
<p>
|
||||
Public domain.
|
||||
</p>
|
||||
<h2>
|
||||
<a href="#author" rel="nofollow">
|
||||
<span></span>
|
||||
</a>
|
||||
Author
|
||||
</h2>
|
||||
<ul>
|
||||
|
@@ -171,7 +171,11 @@ func (sam *PrimarySession) ResolveUDPAddr(network, dest string) (net.Addr, error
|
||||
// Creates a new PrimarySession with the I2CP- and streaminglib options as
|
||||
// specified. See the I2P documentation for a full list of options.
|
||||
func (sam *SAM) NewPrimarySession(id string, keys i2pkeys.I2PKeys, options []string) (*PrimarySession, error) {
|
||||
conn, err := sam.newGenericSession(PrimarySessionSwitch, id, keys, options, []string{})
|
||||
return sam.newPrimarySession(PrimarySessionSwitch, id, keys, options)
|
||||
}
|
||||
|
||||
func (sam *SAM) newPrimarySession(primarySessionSwitch string, id string, keys i2pkeys.I2PKeys, options []string) (*PrimarySession, error) {
|
||||
conn, err := sam.newGenericSession(primarySessionSwitch, id, keys, options, []string{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
2
sam3.go
2
sam3.go
@@ -35,7 +35,7 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
Sig_NONE = ""
|
||||
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"
|
||||
|
10
showhider.css
Normal file
10
showhider.css
Normal file
@@ -0,0 +1,10 @@
|
||||
/* edgar showhider CSS file */
|
||||
#show {display:none; }
|
||||
#hide {display:block; }
|
||||
#show:target {display: block; }
|
||||
#hide:target {display: none; }
|
||||
|
||||
#shownav {display:none; }
|
||||
#hidenav {display:block; }
|
||||
#shownav:target {display: block; }
|
||||
#hidenav:target {display: none; }
|
@@ -161,6 +161,7 @@ func minNonzeroTime(a, b time.Time) time.Time {
|
||||
// - now+Timeout
|
||||
// - d.Deadline
|
||||
// - the context's deadline
|
||||
//
|
||||
// Or zero, if none of Timeout, Deadline, or context's deadline is set.
|
||||
func (s *StreamSession) deadline(ctx context.Context, now time.Time) (earliest time.Time) {
|
||||
if s.Timeout != 0 { // including negative, for historical reasons
|
||||
|
@@ -65,6 +65,22 @@ func PrimarySessionString() string {
|
||||
if err != nil {
|
||||
return "MASTER"
|
||||
}
|
||||
// at this point we're probably running on Java I2P and thus probably
|
||||
// have a PRIMARY session. Just to be sure, try to make one, check
|
||||
// for errors, then immediately close it.
|
||||
testSam, err := NewSAM(SAMDefaultAddr(""))
|
||||
if err != nil {
|
||||
return "MASTER"
|
||||
}
|
||||
newKeys, err := testSam.NewKeys()
|
||||
if err != nil {
|
||||
return "MASTER"
|
||||
}
|
||||
primarySession, err := testSam.newPrimarySession("PRIMARY", "primaryTestTunnel", newKeys, Options_Small)
|
||||
if err != nil {
|
||||
return "MASTER"
|
||||
}
|
||||
primarySession.Close()
|
||||
return "PRIMARY"
|
||||
}
|
||||
return "MASTER"
|
||||
|
Reference in New Issue
Block a user