You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
1.8 KiB

  1. // Copyright 2017-2018 DERO Project. All rights reserved.
  2. // Use of this source code in any form is governed by RESEARCH license.
  3. // license can be found in the LICENSE file.
  4. // GPG: 0F39 E425 8C65 3947 702A 8234 08B2 0360 A03A 9DE8
  5. //
  6. //
  7. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
  8. // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  9. // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
  10. // THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  11. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  12. // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  13. // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  14. // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
  15. // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16. package crypto
  17. import "fmt"
  18. import "encoding/hex"
  19. const (
  20. ChecksumLength = 4 // for addresses
  21. HashLength = 32
  22. )
  23. type Hash [HashLength]byte
  24. type Checksum [ChecksumLength]byte
  25. func (h Hash) MarshalText() ([]byte, error) {
  26. return []byte(fmt.Sprintf("%x", h[:])), nil
  27. }
  28. // stringifier
  29. func (h Hash) String() string {
  30. return fmt.Sprintf("%x", h[:])
  31. }
  32. // convert a hash of hex form to binary form, returns a zero hash if any error
  33. // TODO this should be in crypto
  34. func HashHexToHash(hash_hex string) (hash Hash) {
  35. hash_raw, err := hex.DecodeString(hash_hex)
  36. if err != nil {
  37. //panic(fmt.Sprintf("Cannot hex decode checkpint hash \"%s\"", hash_hex))
  38. return hash
  39. }
  40. if len(hash_raw) != 32 {
  41. //panic(fmt.Sprintf(" hash not 32 byte size Cannot hex decode checkpint hash \"%s\"", hash_hex))
  42. return hash
  43. }
  44. copy(hash[:], hash_raw)
  45. return
  46. }