Exemple #1
0
func (addr *address) Version() (uint64, error) {

	b, err := base58.Decode(addr.Identifier[3:])
	if err != nil {
		return 0, err
	}
	v, _ := varint.Decode(b)

	return v, nil
}
Exemple #2
0
func (addr *address) Stream() (uint64, error) {

	b, err := base58.Decode(addr.Identifier[3:])
	if err != nil {
		return 0, err
	}
	_, nb := varint.Decode(b)
	s, _ := varint.Decode(b[nb:])

	return s, nil
}
Exemple #3
0
func ValidateChecksum(address string) (bool, error) {

	b, err := base58.Decode(address[3:])
	if err != nil {
		return false, err
	}
	raw := b[:len(b)-4]
	cs1 := b[len(b)-4:]

	sha1, sha2 := sha512.New(), sha512.New()
	sha1.Write(raw)
	sha2.Write(sha1.Sum(nil))
	cs2 := sha2.Sum(nil)[:4]

	return bytes.Compare(cs1, cs2) == 0, nil
}
Exemple #4
0
func ValidateChecksum(wif string) (bool, error) {

	if len(wif) < 6 {
		return false, errors.New("wif.Validate: wif is too short")
	}

	extended, err := base58.Decode(wif)
	if err != nil {
		return false, err
	}

	cs1 := extended[len(extended)-4:]
	sha1, sha2 := sha256.New(), sha256.New()
	sha1.Write(extended[:len(extended)-4])
	sha2.Write(sha1.Sum(nil))
	cs2 := sha2.Sum(nil)[:4]
	return bytes.Compare(cs1, cs2) == 0, nil
}
Exemple #5
0
func Decode(wif string) (*bitecdsa.PrivateKey, error) {

	if len(wif) < 6 {
		return nil, errors.New("wif.Decode: wif is too short")
	}

	extended, err := base58.Decode(wif)
	if err != nil {
		return nil, err
	}

	decoded := extended[1 : len(extended)-4]
	keys := new(bitecdsa.PrivateKey)
	keys.D = new(big.Int).SetBytes(decoded)
	keys.PublicKey.BitCurve = bitelliptic.S256()
	for keys.PublicKey.X == nil {
		keys.PublicKey.X, keys.PublicKey.Y = keys.PublicKey.BitCurve.ScalarBaseMult(decoded)
	}

	if !keys.BitCurve.IsOnCurve(keys.PublicKey.X, keys.PublicKey.Y) {
		return nil, errors.New("wif.Decode: Point is not on curve")
	}
	return keys, nil
}