Package com.nettgryppa.security
Class HashCash
java.lang.Object
com.nettgryppa.security.HashCash
- All Implemented Interfaces:
Comparable<HashCash>
public class HashCash extends Object implements Comparable<HashCash>
Class for generation and parsing of HashCash
Copyright 2006 Gregory Rubin grrubin@gmail.com
Permission is given to use, modify, and or distribute this code so long as this message remains attached
Please see the spec at: http://www.hashcash.org/
Copyright 2006 Gregory Rubin grrubin@gmail.com
Permission is given to use, modify, and or distribute this code so long as this message remains attached
Please see the spec at: http://www.hashcash.org/
- Version:
- 1.1
- Author:
- grrubin@gmail.com
-
Field Summary
Fields Modifier and Type Field Description static int
DefaultVersion
-
Constructor Summary
-
Method Summary
Modifier and Type Method Description int
compareTo(HashCash other)
Compares the value of two HashCashesboolean
equals(Object obj)
Two objects are considered equal if they are both of type HashCash and have an identical string representationstatic long
estimateTime(int value)
Estimates how many milliseconds it would take to mint a cash of the specified value.static int
estimateValue(int secs)
Estimates what value (e.g.Calendar
getDate()
The minting dateMap<String,List<String>>
getExtensions()
Extra data encoded in the HashCashString
getResource()
The primary resource being protectedint
getValue()
The value of the HashCash (e.g.int
getVersion()
Which version of HashCash is used hereint
hashCode()
Implemented based on definition of equals()static HashCash
mintCash(String resource, int value)
Mints a version 1 HashCash using now as the datestatic HashCash
mintCash(String resource, int value, int version)
Mints a HashCash using now as the datestatic HashCash
mintCash(String resource, Calendar date, int value)
Mints a version 1 HashCashstatic HashCash
mintCash(String resource, Calendar date, int value, int version)
Mints a HashCashstatic HashCash
mintCash(String resource, Map<String,List<String>> extensions, int value)
Mints a version 1 HashCash using now as the datestatic HashCash
mintCash(String resource, Map<String,List<String>> extensions, int value, int version)
Mints a HashCash using now as the datestatic HashCash
mintCash(String resource, Map<String,List<String>> extensions, Calendar date, int value)
Mints a version 1 HashCashstatic HashCash
mintCash(String resource, Map<String,List<String>> extensions, Calendar date, int value, int version)
Mints a HashCashString
toString()
Returns the canonical string representation of the HashCash
-
Field Details
-
DefaultVersion
public static final int DefaultVersion- See Also:
- Constant Field Values
-
-
Constructor Details
-
HashCash
Parses and validates a HashCash.- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
-
Method Details
-
mintCash
Mints a version 1 HashCash using now as the date- Parameters:
resource
- the string to be encoded in the HashCash- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
mintCash
public static HashCash mintCash(String resource, int value, int version) throws NoSuchAlgorithmExceptionMints a HashCash using now as the date- Parameters:
resource
- the string to be encoded in the HashCashversion
- Which version to mint. Only valid values are 0 and 1- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
mintCash
public static HashCash mintCash(String resource, Calendar date, int value) throws NoSuchAlgorithmExceptionMints a version 1 HashCash- Parameters:
resource
- the string to be encoded in the HashCash- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
mintCash
public static HashCash mintCash(String resource, Calendar date, int value, int version) throws NoSuchAlgorithmExceptionMints a HashCash- Parameters:
resource
- the string to be encoded in the HashCashversion
- Which version to mint. Only valid values are 0 and 1- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
mintCash
public static HashCash mintCash(String resource, Map<String,List<String>> extensions, int value) throws NoSuchAlgorithmExceptionMints a version 1 HashCash using now as the date- Parameters:
resource
- the string to be encoded in the HashCashextensions
- Extra data to be encoded in the HashCash- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
mintCash
public static HashCash mintCash(String resource, Map<String,List<String>> extensions, int value, int version) throws NoSuchAlgorithmExceptionMints a HashCash using now as the date- Parameters:
resource
- the string to be encoded in the HashCashextensions
- Extra data to be encoded in the HashCashversion
- Which version to mint. Only valid values are 0 and 1- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
mintCash
public static HashCash mintCash(String resource, Map<String,List<String>> extensions, Calendar date, int value) throws NoSuchAlgorithmExceptionMints a version 1 HashCash- Parameters:
resource
- the string to be encoded in the HashCashextensions
- Extra data to be encoded in the HashCash- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
mintCash
public static HashCash mintCash(String resource, Map<String,List<String>> extensions, Calendar date, int value, int version) throws NoSuchAlgorithmExceptionMints a HashCash- Parameters:
resource
- the string to be encoded in the HashCashextensions
- Extra data to be encoded in the HashCashversion
- Which version to mint. Only valid values are 0 and 1- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
equals
Two objects are considered equal if they are both of type HashCash and have an identical string representation -
hashCode
public int hashCode()Implemented based on definition of equals() -
toString
Returns the canonical string representation of the HashCash -
getExtensions
Extra data encoded in the HashCash -
getResource
The primary resource being protected -
getDate
The minting date -
getValue
public int getValue()The value of the HashCash (e.g. how many leading zero bits it has) -
getVersion
public int getVersion()Which version of HashCash is used here -
estimateTime
Estimates how many milliseconds it would take to mint a cash of the specified value.- NOTE1: Minting time can vary greatly in fact, half of the time it will take half as long)
- NOTE2: The first time that an estimation function is called it is expensive (on the order of seconds). After that, it is very quick.
- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
estimateValue
Estimates what value (e.g. how many bits of collision) are required for the specified length of time.- NOTE1: Minting time can vary greatly in fact, half of the time it will take half as long)
- NOTE2: The first time that an estimation function is called it is expensive (on the order of seconds). After that, it is very quick.
- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
compareTo
Compares the value of two HashCashes- Specified by:
compareTo
in interfaceComparable<HashCash>
- Parameters:
other
-- See Also:
Comparable.compareTo(Object)
-