mirror of
https://github.com/go-i2p/go-i2p.git
synced 2025-07-04 13:32:52 -04:00
update date, destination, integer
This commit is contained in:
@ -7,13 +7,12 @@ import (
|
||||
type Date [8]byte
|
||||
|
||||
//
|
||||
// Time takes the value stored in date as an 8
|
||||
// byte big-endian integer representing the
|
||||
// number of milliseconds since the beginning
|
||||
// of unix time and converts it to a go time.Time
|
||||
// Time takes the value stored in date as an 8 byte big-endian integer representing the
|
||||
// number of milliseconds since the beginning of unix time and converts it to a Go time.Time
|
||||
// struct.
|
||||
//
|
||||
func (date Date) Time() time.Time {
|
||||
func (date Date) Time() (date_time time.Time) {
|
||||
seconds := Integer(date[:])
|
||||
return time.Unix(0, int64(seconds*1000000))
|
||||
date_time = time.Unix(0, int64(seconds*1000000))
|
||||
return
|
||||
}
|
||||
|
@ -7,6 +7,10 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
//
|
||||
// A Destination is a KeysAndCert with functionallity
|
||||
// for generating base32 and base64 addresses.
|
||||
//
|
||||
type Destination []byte
|
||||
|
||||
func (destination Destination) PublicKey() (crypto.PublicKey, error) {
|
||||
@ -21,12 +25,19 @@ func (destination Destination) Certificate() (Certificate, error) {
|
||||
return KeysAndCert(destination).Certificate()
|
||||
}
|
||||
|
||||
func (destination Destination) Base32Address() string {
|
||||
//
|
||||
// Generate the I2P base32 address for this Destination.
|
||||
//
|
||||
func (destination Destination) Base32Address() (str string) {
|
||||
hash := crypto.SHA256(destination)
|
||||
str := strings.Trim(base32.EncodeToString(hash[:]), "=")
|
||||
return str + ".b32.i2p"
|
||||
str = strings.Trim(base32.EncodeToString(hash[:]), "=")
|
||||
str = str + ".b32.i2p"
|
||||
return
|
||||
}
|
||||
|
||||
//
|
||||
// Generate the I2P base64 address for this Destination.
|
||||
//
|
||||
func (destination Destination) Base64() string {
|
||||
return base64.EncodeToString(destination)
|
||||
}
|
||||
|
@ -4,20 +4,22 @@ import (
|
||||
"encoding/binary"
|
||||
)
|
||||
|
||||
const (
|
||||
INTEGER_SIZE = 8
|
||||
)
|
||||
|
||||
//
|
||||
// Interpret a slice of bytes from length 1
|
||||
// to length 8 as a big-endian integer and
|
||||
// return an int representation.
|
||||
// Interpret a slice of bytes from length 0 to length 8 as a big-endian
|
||||
// integer and return an int representation.
|
||||
//
|
||||
func Integer(number []byte) int {
|
||||
func Integer(number []byte) (value int) {
|
||||
num_len := len(number)
|
||||
if num_len < 8 {
|
||||
if num_len < INTEGER_SIZE {
|
||||
number = append(
|
||||
make([]byte, 8-num_len),
|
||||
make([]byte, INTEGER_SIZE-num_len),
|
||||
number...,
|
||||
)
|
||||
}
|
||||
return int(
|
||||
binary.BigEndian.Uint64(number),
|
||||
)
|
||||
value = int(binary.BigEndian.Uint64(number))
|
||||
return
|
||||
}
|
||||
|
@ -18,3 +18,10 @@ func TestWorksWith1Byte(t *testing.T) {
|
||||
t.Fatal("Integer() does not work with 1 byte")
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsZeroWithNoData(t *testing.T) {
|
||||
i := Integer([]byte{})
|
||||
if i != 0 {
|
||||
t.Fatal("Integer() does not work with 0 bytes")
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user