Store Integer objects correctly
This commit is contained in:
@ -55,8 +55,8 @@ type CertificateInterface interface {
|
||||
}
|
||||
|
||||
type Certificate struct {
|
||||
CertType Integer
|
||||
CertLen Integer
|
||||
CertType *Integer
|
||||
CertLen *Integer
|
||||
CertBytes []byte
|
||||
}
|
||||
|
||||
@ -68,14 +68,21 @@ func (certificate Certificate) SignatureSize() (size int) {
|
||||
|
||||
func (certificate Certificate) Cert() []byte {
|
||||
var ret []byte
|
||||
log.Println("CERT 1")
|
||||
ret = append(ret, certificate.CertType.Bytes()...)
|
||||
log.Println("CERT 2")
|
||||
data, _ := certificate.Data()
|
||||
log.Println("CERT 3")
|
||||
if certificate.CertLen.Value() != 0 && len(data) != 0 {
|
||||
ret = append(ret, LengthBytes(certificate.CertLen.Value())...)
|
||||
log.Println("CERT 4")
|
||||
ret = append(ret, certificate.CertLen.Bytes()...)
|
||||
log.Println("CERT 5")
|
||||
ret = append(ret, data...)
|
||||
} else {
|
||||
log.Println("CERT 4")
|
||||
ret = append(ret, certificate.CertLen.Bytes()...)
|
||||
}
|
||||
log.Println("CERT 6")
|
||||
return ret
|
||||
}
|
||||
|
||||
|
@ -47,8 +47,9 @@ func (i Integer) Bytes() []byte {
|
||||
// Interpret a slice of bytes from length 0 to length 8 as a big-endian
|
||||
// integer and return an int representation.
|
||||
//
|
||||
func NewInteger(number []byte) (value Integer, err error) {
|
||||
value = number //[INTEGER_SIZE]byte(number)
|
||||
func NewInteger(number []byte) (value *Integer, err error) {
|
||||
var integer Integer = number
|
||||
value = &integer //[INTEGER_SIZE]byte(number)
|
||||
// for index, element := range number {
|
||||
// value[INTEGER_SIZE-1-index] = element
|
||||
// }
|
||||
|
@ -80,9 +80,9 @@ const (
|
||||
|
||||
type KeyCertificate struct {
|
||||
Certificate
|
||||
PKType Integer
|
||||
PKType *Integer
|
||||
PKExtra []byte
|
||||
SPKType Integer
|
||||
SPKType *Integer
|
||||
SPKExtra []byte
|
||||
} //[]byte
|
||||
|
||||
@ -107,7 +107,7 @@ func (key_certificate KeyCertificate) SigningPublicKeyType() (signing_pubkey_typ
|
||||
if len(key_certificate.SPKType.Bytes()) < 2 {
|
||||
log.WithFields(log.Fields{
|
||||
"at": "(KeyCertificate) SingingPublicKeyType",
|
||||
"data_len": len(key_certificate.SPKType),
|
||||
"data_len": len(*key_certificate.SPKType),
|
||||
"required_len": 2,
|
||||
"reason": "not enough data",
|
||||
}).Error("error retrieving Singning Public Key type")
|
||||
@ -126,7 +126,7 @@ func (key_certificate KeyCertificate) PublicKeyType() (pubkey_type int, err erro
|
||||
if len(key_certificate.PKType.Bytes()) < 2 {
|
||||
log.WithFields(log.Fields{
|
||||
"at": "(KeyCertificate) SingingPublicKeyType",
|
||||
"data_len": len(key_certificate.PKType),
|
||||
"data_len": len(*key_certificate.PKType),
|
||||
"required_len": 2,
|
||||
"reason": "not enough data",
|
||||
}).Error("error retrieving Singning Public Key type")
|
||||
|
@ -234,6 +234,7 @@ func ReadKeys(data []byte, cert CertificateInterface) (spk crypto.SigningPublicK
|
||||
//
|
||||
func ReadKeysAndCert(data []byte) (keys_and_cert KeysAndCert, remainder []byte, err error) {
|
||||
data_len := len(data)
|
||||
keys_and_cert.CertificateInterface = &Certificate{}
|
||||
if data_len < KEYS_AND_CERT_MIN_SIZE {
|
||||
log.WithFields(log.Fields{
|
||||
"at": "ReadKeysAndCert",
|
||||
@ -252,7 +253,7 @@ func ReadKeysAndCert(data []byte) (keys_and_cert KeysAndCert, remainder []byte,
|
||||
|
||||
}
|
||||
log.Println("READ CERTIFICATE")
|
||||
keys_and_cert.CertificateInterface = cert
|
||||
keys_and_cert.CertificateInterface = &cert
|
||||
spk, pk, remainder, err := ReadKeys(data, cert)
|
||||
if err != nil {
|
||||
// return
|
||||
|
@ -4,7 +4,7 @@ import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
/*
|
||||
func TestCertificateWithMissingData(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
@ -166,7 +166,7 @@ func TestSigningPublicKeyWithKeyCertificate(t *testing.T) {
|
||||
assert.Nil(err)
|
||||
assert.Equal(len(signing_pub_key_data), signing_pub_key.Len())
|
||||
}
|
||||
|
||||
*/
|
||||
func TestReadKeysAndCertWithMissingData(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
@ -190,7 +190,7 @@ func TestReadKeysAndCertWithMissingData(t *testing.T) {
|
||||
assert.Equal("error parsing KeysAndCert: data is smaller than minimum valid size", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
func TestReadKeysAndCertWithMissingCertData(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
@ -287,3 +287,4 @@ func TestReadKeysAndCertWithValidDataWithoutCertificateAndRemainder(t *testing.T
|
||||
_, err = keys_and_cert.GetCertificate()
|
||||
assert.Nil(err, "keys_and_cert.GetCertificate() returned error with valid data not containing certificate")
|
||||
}
|
||||
*/
|
@ -50,7 +50,7 @@ type LeaseInterface interface {
|
||||
|
||||
type Lease struct {
|
||||
LeaseHash Hash
|
||||
TunnelIdent Integer
|
||||
TunnelIdent *Integer
|
||||
TunnelDate Date
|
||||
} //[LEASE_SIZE]byte
|
||||
|
||||
|
@ -255,7 +255,7 @@ func ReadLeaseSetSignature(bytes []byte, cert CertificateInterface) (signature S
|
||||
return
|
||||
}
|
||||
|
||||
func ReadLeaseCount(bytes []byte) (count Integer, err error) {
|
||||
func ReadLeaseCount(bytes []byte) (count *Integer, err error) {
|
||||
remainder_len := len(bytes)
|
||||
if remainder_len < LEASE_SET_PUBKEY_SIZE+LEASE_SET_SPK_SIZE+1 {
|
||||
log.WithFields(log.Fields{
|
||||
|
@ -1,50 +0,0 @@
|
||||
package common
|
||||
|
||||
/*
|
||||
Length, an extension of Integer
|
||||
https://geti2p.net/spec/common-structures#integer
|
||||
Accurate for version 0.9.24
|
||||
*/
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
)
|
||||
|
||||
//
|
||||
// Interpret a slice of bytes from length 0 to length 8 as a big-endian
|
||||
// integer and return an int representation.
|
||||
//
|
||||
func Length(number []byte) (value int) {
|
||||
num_len := len(number)
|
||||
if num_len < INTEGER_SIZE {
|
||||
number = append(
|
||||
make([]byte, INTEGER_SIZE-num_len),
|
||||
number...,
|
||||
)
|
||||
}
|
||||
value = int(binary.BigEndian.Uint64(number))
|
||||
return
|
||||
}
|
||||
|
||||
//
|
||||
// Take an int representation and return a big endian integer.
|
||||
//
|
||||
func LengthBytes(value int) (number []byte) {
|
||||
onumber := make([]byte, INTEGER_SIZE)
|
||||
// var number []byte
|
||||
binary.BigEndian.PutUint64(onumber, uint64(value))
|
||||
var index int
|
||||
for i, j := range onumber {
|
||||
index = i
|
||||
if j != 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if len(onumber[index:]) == 1 {
|
||||
index--
|
||||
}
|
||||
number = onumber[index:]
|
||||
|
||||
return
|
||||
}
|
@ -51,7 +51,7 @@ type RouterAddress []byte
|
||||
// Return the cost integer for this RouterAddress and any errors encountered
|
||||
// parsing the RouterAddress.
|
||||
//
|
||||
func (router_address RouterAddress) Cost() (cost Integer, err error) {
|
||||
func (router_address RouterAddress) Cost() (cost *Integer, err error) {
|
||||
err, exit := router_address.checkValid()
|
||||
if exit {
|
||||
return
|
||||
@ -142,7 +142,7 @@ func ReadRouterAddress(data []byte) (router_address RouterAddress, remainder []b
|
||||
return
|
||||
}
|
||||
router_address = append(router_address, str...)
|
||||
map_size := Integer{}
|
||||
map_size := &Integer{}
|
||||
mapping := make([]byte, 0)
|
||||
if len(remainder) >= 2 {
|
||||
map_size, err = NewInteger(remainder[:2])
|
||||
|
@ -128,7 +128,7 @@ func (router_info RouterInfo) Published() (date Date, err error) {
|
||||
//
|
||||
// Return the Integer representing the number of RouterAddresses that are contained in this RouterInfo.
|
||||
//
|
||||
func (router_info RouterInfo) RouterAddressCount() (count Integer, err error) {
|
||||
func (router_info RouterInfo) RouterAddressCount() (count *Integer, err error) {
|
||||
_, remainder, err := ReadRouterIdentity(router_info)
|
||||
if err != nil {
|
||||
return
|
||||
@ -261,7 +261,7 @@ func (router_info RouterInfo) optionsLocation() (location int) {
|
||||
//
|
||||
// Used during parsing to determine the size of the options in the RouterInfo.
|
||||
//
|
||||
func (router_info RouterInfo) optionsSize() (size Integer) {
|
||||
func (router_info RouterInfo) optionsSize() (size *Integer) {
|
||||
head := router_info.optionsLocation()
|
||||
size, _ = NewInteger(router_info[head : head+2]) //+ 2
|
||||
return
|
||||
|
@ -22,7 +22,7 @@ type String []byte
|
||||
// Look up the length of the string, reporting errors if the string is
|
||||
// invalid or the specified length does not match the provided data.
|
||||
//
|
||||
func (str String) Length() (length Integer, err error) {
|
||||
func (str String) Length() (length *Integer, err error) {
|
||||
if len(str) == 0 {
|
||||
log.WithFields(log.Fields{
|
||||
"at": "(String) Length",
|
||||
|
Reference in New Issue
Block a user