38 lines
788 B
Go
38 lines
788 B
Go
package moneroutil
|
|
|
|
import (
|
|
"bytes"
|
|
)
|
|
|
|
type Address struct {
|
|
network int
|
|
spendingKey []byte
|
|
viewingKey []byte
|
|
}
|
|
|
|
func (a *Address) Base58() (result string) {
|
|
prefix := []byte{byte(a.network)}
|
|
checksum := GetChecksum(prefix, a.spendingKey, a.viewingKey)
|
|
result = string(EncodeMoneroBase58(prefix, a.spendingKey, a.viewingKey, checksum[:]))
|
|
return
|
|
}
|
|
|
|
func NewAddress(address string) (result *Address, err string) {
|
|
raw := DecodeMoneroBase58([]byte(address))
|
|
if len(raw) != 69 {
|
|
err = "Address is the wrong length"
|
|
return
|
|
}
|
|
checksum := GetChecksum(raw[:65])
|
|
if bytes.Compare(checksum[:], raw[65:]) != 0 {
|
|
err = "Checksum does not validate"
|
|
return
|
|
}
|
|
result = &Address{
|
|
network: int(raw[0]),
|
|
spendingKey: raw[1:33],
|
|
viewingKey: raw[33:65],
|
|
}
|
|
return
|
|
}
|