Documentation ¶
Overview ¶
Package cryptonight implements CryptoNight hash function and some of its variant. Original CryptoNight algorithm is defined in CNS008 at https://cryptonote.org/cns/cns008.txt
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CheckHash ¶
CheckHash checks hash's difficulty against diff. It returns true if hash's difficulty is equal to or greater than diff.
if len(hash) != 32, the return value is always false.
CheckHash should be prefered over Difficulty if you only want to check if some hash passes a specific difficulty, as CheckHash is very fast and requires no heap allocation. It actually checks (hashDiff * diff) < 2^256 instead of calculating the exact value of hashDiff.
This function is a port of monero: src/cryptonote_basic/difficulty.cpp:check_hash
This isn't a part of CryptoNight, but since such demand of checking difficulty is too common, it is thus included in this package.
Example ¶
hash, _ := hex.DecodeString("8e3c1865f22801dc3df0a688da80701e2390e7838e65c142604cc00eafe34000") fmt.Println("Hash difficulty greater than 1000:", CheckHash(hash, 1000)) fmt.Println("Hash difficulty greater than 2000:", CheckHash(hash, 2000)) // not necessary to use if you only want to compare fmt.Println("Hash difficulty precise value:", Difficulty(hash))
Output: Hash difficulty greater than 1000: true Hash difficulty greater than 2000: false Hash difficulty precise value: 1009
func Difficulty ¶
Difficulty returns hash's difficulty.
If len(hash) != 32, the return value is always 0.
Difficulty is slower than CheckHash, so it should only be used when necessary, for example when you want to tell the exact difficulty value of a hash.
This isn't a part of CryptoNight, but since such demand of checking difficulty is too common, it is thus included in this package.
func Sum ¶
Sum calculate a CryptoNight hash digest. The return value is exactly 32 bytes long.
When variant is 1, data is required to have at least 43 bytes. This is assumed and not checked by Sum. If this condition doesn't meet, Sum will panic straightforward.
Example ¶
blob := []byte("Hello, 世界") fmt.Printf("%x\n", Sum(blob, 0)) // original blob = []byte("variant 1 requires at least 43 bytes of input.") fmt.Printf("%x\n", Sum(blob, 1)) // variant 1 blob = []byte("Monero is cash for a connected world. It’s fast, private, and secure.") fmt.Printf("%x\n", Sum(blob, 2)) // variant 2
Output: 0999794e4e20d86e6a81b54495aeb370b6a9ae795fb5af4f778afaf07c0b2e0e 261124c5a6dca5d4aa3667d328a94ead9a819ae714e1f1dc113ceeb14f1ecf99 abb61f40468c70234051e4bb5e8b670812473b2a71e02c9633ef94996a621b96
Types ¶
This section is empty.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
cmd
|
|
Package groestl implements Grøstl-256 algorithm.
|
Package groestl implements Grøstl-256 algorithm. |
internal
|
|
aes
Package aes implements AES utilities for CryptoNight usage.
|
Package aes implements AES utilities for CryptoNight usage. |
sha3
Package sha3 implements the SHA-3 fixed-output-length hash functions and the SHAKE variable-output-length hash functions defined by FIPS-202.
|
Package sha3 implements the SHA-3 fixed-output-length hash functions and the SHAKE variable-output-length hash functions defined by FIPS-202. |
Package jh implements JH-256 algorithm.
|
Package jh implements JH-256 algorithm. |