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

61 lines
1.7 KiB
Go
Raw Normal View History

package common
import (
2016-02-07 02:54:02 -08:00
"errors"
"github.com/bounce-chat/go-i2p/lib/crypto"
)
type KeysAndCert []byte
2016-02-07 02:54:02 -08:00
func (keys_and_cert KeysAndCert) PublicKey() (key crypto.ElgPublicKey, err error) {
keys_cert_len := len(keys_and_cert)
if keys_cert_len < 387 {
if keys_cert_len < 256 {
err = errors.New("error parsing KeysAndCert: data smaller than ElgPublicKey size")
return
}
err = errors.New("warning parsing KeysAndCert: data is smaller than minimum valid size")
}
copy(keys_and_cert[:256], key[:])
return
}
2016-02-07 02:54:02 -08:00
func (keys_and_cert KeysAndCert) SigningPublicKey() (signing_public_key crypto.SigningPublicKey, err error) {
cert, err := keys_and_cert.Certificate()
switch err.Error() {
case "":
}
if cert.Type() == CERT_KEY {
2016-02-07 02:54:02 -08:00
signing_public_key = KeyCertificate(cert).SigningPublicKey()
} else {
2016-02-07 02:54:02 -08:00
// Only Key Certificates are currently used:
// https://geti2p.net/en/docs/spec/common-structures#type_Certificate
}
return
}
2016-02-07 02:54:02 -08:00
func (keys_and_cert KeysAndCert) Certificate() (cert Certificate, err error) {
keys_cert_len := len(keys_and_cert)
if keys_cert_len < 387 {
if keys_cert_len < 384 {
err = errors.New("error parsing KeysAndCert: data smaller than needed for Certificate")
return
}
err = errors.New("warning parsing KeysAndCert: data is smaller than minimum valid size")
}
copy(keys_and_cert[256+128:], cert)
return
}
func ReadKeysAndCert(data []byte) (KeysAndCert, []byte, error) {
var keys_and_cert KeysAndCert
copy(data[:387], keys_and_cert)
2016-02-07 02:54:02 -08:00
cert, _ := keys_and_cert.Certificate()
n, err := cert.Length()
if err != nil {
return keys_and_cert, data, err
}
keys_and_cert = append(keys_and_cert, data[387:n]...)
return keys_and_cert, data[387+n:], nil
}