Esempio n. 1
0
// Verifies consistency of a serialized HD address
func ByteCheck(dbin []byte) error {
	// check proper length
	if len(dbin) != 82 {
		return errors.New("ByteCheck: Unexpected length")
	}

	// check for correct Public or Private Prefix
	vb := binary.BigEndian.Uint32(dbin[:4])
	if vb != Public && vb != Private && vb != TestPublic && vb != TestPrivate {
		return errors.New("ByteCheck: Unexpected Prefix")
	}

	// if Public, check x coord is on curve
	if vb == Public || vb == TestPublic {
		var xy secp256k1.XY
		xy.ParsePubkey(dbin[45:78])
		if !xy.IsValid() {
			return errors.New("ByteCheck: Invalid public key")
		}
	}
	return nil
}