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/- Version:
- 1.1
- Author:
- grrubin@gmail.com
-
-
Field Summary
Fields Modifier and Type Field Description static int
DefaultVersion
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods 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 Detail
-
DefaultVersion
public static final int DefaultVersion
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
HashCash
public HashCash(String cash) throws NoSuchAlgorithmException
Parses and validates a HashCash.- Throws:
NoSuchAlgorithmException
- If SHA1 is not a supported Message Digest
-
-
Method Detail
-
mintCash
public static HashCash mintCash(String resource, int value) throws NoSuchAlgorithmException
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 NoSuchAlgorithmException
Mints 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 NoSuchAlgorithmException
Mints 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 NoSuchAlgorithmException
Mints 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 NoSuchAlgorithmException
Mints 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 NoSuchAlgorithmException
Mints 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 NoSuchAlgorithmException
Mints 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 NoSuchAlgorithmException
Mints 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
public boolean equals(Object obj)
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
public String toString()
Returns the canonical string representation of the HashCash
-
getResource
public String getResource()
The primary resource being protected
-
getDate
public Calendar 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
public static long estimateTime(int value) throws NoSuchAlgorithmException
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
public static int estimateValue(int secs) throws NoSuchAlgorithmException
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
public int compareTo(HashCash other)
Compares the value of two HashCashes- Specified by:
compareTo
in interfaceComparable<HashCash>
- Parameters:
other
-- See Also:
Comparable.compareTo(Object)
-
-