Files
go-i2p/lib/common/keys_and_cert_test.go

290 lines
9.8 KiB
Go
Raw Normal View History

package common
2016-04-01 21:36:20 -07:00
import (
2016-06-16 22:45:38 -07:00
"github.com/stretchr/testify/assert"
2016-04-01 21:36:20 -07:00
"testing"
)
func TestCertificateWithMissingData(t *testing.T) {
assert := assert.New(t)
2016-04-01 21:36:20 -07:00
cert_data := []byte{0x05, 0x00, 0x04, 0x00, 0x01}
data := make([]byte, 128+256)
data = append(data, cert_data...)
keys_and_cert := KeysAndCert(data)
2016-04-01 21:36:20 -07:00
cert, err := keys_and_cert.Certificate()
if assert.NotNil(err) {
assert.Equal("certificate parsing warning: certificate data is shorter than specified by length", err.Error())
}
cert_bytes := []byte(cert)
if assert.Equal(len(cert_data), len(cert_bytes)) {
assert.Equal(cert_bytes, cert_data, "keys_and_cert.Certificate() did not return available data when cert was missing some data")
}
2016-04-01 21:36:20 -07:00
}
func TestCertificateWithValidData(t *testing.T) {
assert := assert.New(t)
cert_data := []byte{0x05, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00}
data := make([]byte, 128+256)
data = append(data, cert_data...)
keys_and_cert := KeysAndCert(data)
cert, err := keys_and_cert.Certificate()
assert.Nil(err)
cert_bytes := []byte(cert)
if assert.Equal(len(cert_data), len(cert_bytes)) {
assert.Equal(cert_bytes, cert_data, "keys_and_cert.Certificate() did not return correct data with valid cert")
}
2016-04-01 21:36:20 -07:00
}
2016-06-17 21:53:36 -07:00
func TestPublicKeyWithBadData(t *testing.T) {
assert := assert.New(t)
cert_data := []byte{0x05, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00}
pub_key_data := make([]byte, 193)
data := make([]byte, 128)
data = append(data, pub_key_data...)
data = append(data, cert_data...)
keys_and_cert := KeysAndCert(data)
pub_key, err := keys_and_cert.PublicKey()
if assert.NotNil(err) {
assert.Equal("error parsing KeysAndCert: data is smaller than minimum valid size", err.Error())
}
assert.Nil(pub_key)
}
2016-04-01 21:36:20 -07:00
func TestPublicKeyWithBadCertificate(t *testing.T) {
2016-06-17 21:53:36 -07:00
assert := assert.New(t)
cert_data := []byte{0x05, 0x00, 0x04, 0x00, 0x01}
pub_key_data := make([]byte, 256)
data := make([]byte, 128)
data = append(data, pub_key_data...)
data = append(data, cert_data...)
keys_and_cert := KeysAndCert(data)
pub_key, err := keys_and_cert.PublicKey()
if assert.NotNil(err) {
assert.Equal("certificate parsing warning: certificate data is shorter than specified by length", err.Error())
}
assert.Nil(pub_key)
2016-04-01 21:36:20 -07:00
}
2016-06-17 21:53:36 -07:00
func TestPublicKeyWithNullCertificate(t *testing.T) {
assert := assert.New(t)
cert_data := []byte{0x00, 0x00, 0x00}
pub_key_data := make([]byte, 256)
data := make([]byte, 128)
data = append(data, pub_key_data...)
data = append(data, cert_data...)
keys_and_cert := KeysAndCert(data)
pub_key, err := keys_and_cert.PublicKey()
assert.Nil(err)
assert.Equal(len(pub_key_data), pub_key.Len())
2016-04-01 21:36:20 -07:00
}
func TestPublicKeyWithKeyCertificate(t *testing.T) {
2016-06-17 21:53:36 -07:00
assert := assert.New(t)
cert_data := []byte{0x05, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00}
pub_key_data := make([]byte, 256)
data := make([]byte, 128)
data = append(data, pub_key_data...)
data = append(data, cert_data...)
keys_and_cert := KeysAndCert(data)
pub_key, err := keys_and_cert.PublicKey()
assert.Nil(err)
assert.Equal(len(pub_key_data), pub_key.Len())
2016-04-01 21:36:20 -07:00
}
2016-06-17 21:53:36 -07:00
func TestSigningPublicKeyWithBadData(t *testing.T) {
assert := assert.New(t)
cert_data := []byte{0x05, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00}
pub_key_data := make([]byte, 256)
data := make([]byte, 93)
data = append(data, pub_key_data...)
data = append(data, cert_data...)
keys_and_cert := KeysAndCert(data)
signing_pub_key, err := keys_and_cert.SigningPublicKey()
if assert.NotNil(err) {
assert.Equal("error parsing KeysAndCert: data is smaller than minimum valid size", err.Error())
}
assert.Nil(signing_pub_key)
2016-04-01 21:36:20 -07:00
}
func TestSigningPublicKeyWithBadCertificate(t *testing.T) {
2016-06-17 21:53:36 -07:00
assert := assert.New(t)
cert_data := []byte{0x05, 0x00, 0x04, 0x00, 0x01}
pub_key_data := make([]byte, 256)
data := make([]byte, 128)
data = append(data, pub_key_data...)
data = append(data, cert_data...)
keys_and_cert := KeysAndCert(data)
signing_pub_key, err := keys_and_cert.SigningPublicKey()
if assert.NotNil(err) {
assert.Equal("certificate parsing warning: certificate data is shorter than specified by length", err.Error())
}
assert.Nil(signing_pub_key)
2016-04-01 21:36:20 -07:00
}
2016-06-17 21:53:36 -07:00
func TestSigningPublicKeyWithNullCertificate(t *testing.T) {
assert := assert.New(t)
cert_data := []byte{0x00, 0x00, 0x00}
pub_key_data := make([]byte, 256)
signing_pub_key_data := make([]byte, 128)
data := append(pub_key_data, signing_pub_key_data...)
data = append(data, cert_data...)
keys_and_cert := KeysAndCert(data)
signing_pub_key, err := keys_and_cert.SigningPublicKey()
assert.Nil(err)
assert.Equal(len(signing_pub_key_data), signing_pub_key.Len())
2016-04-01 21:36:20 -07:00
}
func TestSigningPublicKeyWithKeyCertificate(t *testing.T) {
2016-06-17 21:53:36 -07:00
assert := assert.New(t)
cert_data := []byte{0x05, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00}
pub_key_data := make([]byte, 256)
signing_pub_key_data := make([]byte, 128)
data := append(pub_key_data, signing_pub_key_data...)
data = append(data, cert_data...)
keys_and_cert := KeysAndCert(data)
2016-04-01 21:36:20 -07:00
2016-06-17 21:53:36 -07:00
signing_pub_key, err := keys_and_cert.SigningPublicKey()
assert.Nil(err)
assert.Equal(len(signing_pub_key_data), signing_pub_key.Len())
2016-04-01 21:36:20 -07:00
}
func TestReadKeysAndCertWithMissingData(t *testing.T) {
2016-06-17 00:17:48 -07:00
assert := assert.New(t)
cert_data := make([]byte, 128)
keys_and_cert, remainder, err := ReadKeysAndCert(cert_data)
assert.Equal(0, len(remainder))
if assert.NotNil(err) {
assert.Equal("error parsing KeysAndCert: data is smaller than minimum valid size", err.Error())
}
_, err = keys_and_cert.PublicKey()
if assert.NotNil(err) {
assert.Equal("error parsing KeysAndCert: data is smaller than minimum valid size", err.Error())
}
_, err = keys_and_cert.SigningPublicKey()
if assert.NotNil(err) {
assert.Equal("error parsing KeysAndCert: data is smaller than minimum valid size", err.Error())
}
_, err = keys_and_cert.Certificate()
if assert.NotNil(err) {
assert.Equal("error parsing KeysAndCert: data is smaller than minimum valid size", err.Error())
}
2016-04-01 21:36:20 -07:00
}
func TestReadKeysAndCertWithMissingCertData(t *testing.T) {
2016-06-17 00:09:33 -07:00
assert := assert.New(t)
cert_data := make([]byte, 128+256)
cert_data = append(cert_data, []byte{0x05, 0x00, 0x04, 0x00, 0x01}...)
keys_and_cert, remainder, err := ReadKeysAndCert(cert_data)
assert.Equal(0, len(remainder))
if assert.NotNil(err) {
assert.Equal("certificate parsing warning: certificate data is shorter than specified by length", err.Error())
}
_, err = keys_and_cert.PublicKey()
if assert.NotNil(err) {
assert.Equal("certificate parsing warning: certificate data is shorter than specified by length", err.Error())
}
_, err = keys_and_cert.SigningPublicKey()
if assert.NotNil(err) {
assert.Equal("certificate parsing warning: certificate data is shorter than specified by length", err.Error())
}
_, err = keys_and_cert.Certificate()
if assert.NotNil(err) {
assert.Equal("certificate parsing warning: certificate data is shorter than specified by length", err.Error())
}
2016-04-01 21:36:20 -07:00
}
func TestReadKeysAndCertWithValidDataWithCertificate(t *testing.T) {
2016-06-16 22:45:38 -07:00
assert := assert.New(t)
cert_data := make([]byte, 128+256)
cert_data = append(cert_data, []byte{0x05, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00}...)
keys_and_cert, remainder, err := ReadKeysAndCert(cert_data)
assert.Equal(0, len(remainder))
assert.Nil(err)
_, err = keys_and_cert.PublicKey()
assert.Nil(err, "keys_and_cert.PublicKey() returned error with valid data containing certificate")
_, err = keys_and_cert.SigningPublicKey()
assert.Nil(err, "keys_and_cert.SigningPublicKey() returned error with valid data containing certificate")
_, err = keys_and_cert.Certificate()
assert.Nil(err, "keys_and_cert.Certificate() returned error with valid data containing certificate")
2016-04-01 21:36:20 -07:00
}
func TestReadKeysAndCertWithValidDataWithoutCertificate(t *testing.T) {
2016-06-16 22:45:38 -07:00
assert := assert.New(t)
cert_data := make([]byte, 128+256)
cert_data = append(cert_data, []byte{0x00, 0x00, 0x00}...)
keys_and_cert, remainder, err := ReadKeysAndCert(cert_data)
assert.Equal(0, len(remainder))
assert.Nil(err)
_, err = keys_and_cert.PublicKey()
assert.Nil(err, "keys_and_cert.PublicKey() returned error with valid data not containing certificate")
_, err = keys_and_cert.SigningPublicKey()
assert.Nil(err, "keys_and_cert.SigningPublicKey() returned error with valid data not containing certificate")
_, err = keys_and_cert.Certificate()
assert.Nil(err, "keys_and_cert.Certificate() returned error with valid data not containing certificate")
2016-04-01 21:36:20 -07:00
}
func TestReadKeysAndCertWithValidDataWithCertificateAndRemainder(t *testing.T) {
2016-06-17 00:09:33 -07:00
assert := assert.New(t)
cert_data := make([]byte, 128+256)
cert_data = append(cert_data, []byte{0x05, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x41}...)
keys_and_cert, remainder, err := ReadKeysAndCert(cert_data)
if assert.Equal(1, len(remainder)) {
assert.Equal("A", string(remainder[0]))
}
assert.Nil(err)
_, err = keys_and_cert.PublicKey()
assert.Nil(err, "keys_and_cert.PublicKey() returned error with valid data containing certificate")
_, err = keys_and_cert.SigningPublicKey()
assert.Nil(err, "keys_and_cert.SigningPublicKey() returned error with valid data containing certificate")
_, err = keys_and_cert.Certificate()
assert.Nil(err, "keys_and_cert.Certificate() returned error with valid data containing certificate")
2016-04-01 21:36:20 -07:00
}
func TestReadKeysAndCertWithValidDataWithoutCertificateAndRemainder(t *testing.T) {
2016-06-17 00:09:33 -07:00
assert := assert.New(t)
2016-04-01 21:36:20 -07:00
2016-06-17 00:09:33 -07:00
cert_data := make([]byte, 128+256)
cert_data = append(cert_data, []byte{0x00, 0x00, 0x00, 0x41}...)
keys_and_cert, remainder, err := ReadKeysAndCert(cert_data)
if assert.Equal(1, len(remainder)) {
assert.Equal("A", string(remainder[0]))
}
assert.Nil(err)
_, err = keys_and_cert.PublicKey()
assert.Nil(err, "keys_and_cert.PublicKey() returned error with valid data not containing certificate")
_, err = keys_and_cert.SigningPublicKey()
assert.Nil(err, "keys_and_cert.SigningPublicKey() returned error with valid data not containing certificate")
_, err = keys_and_cert.Certificate()
assert.Nil(err, "keys_and_cert.Certificate() returned error with valid data not containing certificate")
}