Files
go-i2p/lib/i2np/garlic.go
2017-07-02 15:53:10 -07:00

73 lines
1.7 KiB
Go

package i2np
import (
"github.com/hkparker/go-i2p/lib/common"
"time"
)
/*
I2P I2NP Garlic
https://geti2p.net/spec/i2np
Accurate for version 0.9.28
Encrypted:
+----+----+----+----+----+----+----+----+
| length | data |
+----+----+----+----+ +
| |
~ ~
~ ~
| |
+----+----+----+----+----+----+----+----+
length ::
4 byte Integer
number of bytes that follow 0 - 64 KB
data ::
$length bytes
ElGamal encrypted data
Unencrypted data:
+----+----+----+----+----+----+----+----+
| num| clove 1 |
+----+ +
| |
~ ~
~ ~
| |
+----+----+----+----+----+----+----+----+
| clove 2 ... |
~ ~
~ ~
| |
+----+----+----+----+----+----+----+----+
| Certificate | Message_ID |
+----+----+----+----+----+----+----+----+
Expiration |
+----+----+----+----+----+----+----+
num ::
1 byte Integer number of GarlicCloves to follow
clove :: a GarlicClove
Certificate :: always NULL in the current implementation (3 bytes total, all zeroes)
Message_ID :: 4 byte Integer
Expiration :: Date (8 bytes)
*/
type GarlicElGamal []byte
type Garlic struct {
Count int
Cloves []GarlicClove
Certificate common.Certificate
MessageID int
Expiration time.Time
}