# Module `src.onionrcrypto.signing`

Expand source code

    import base64, binascii

    import unpaddedbase32
    import nacl.encoding, nacl.signing, nacl.exceptions

    from onionrutils import bytesconverter
    from onionrutils import mnemonickeys
    import logger

    def ed_sign(data, key, encodeResult=False):
        '''Ed25519 sign data'''
        key = unpaddedbase32.repad(bytesconverter.str_to_bytes(key))
        try:
            data = data.encode()
        except AttributeError:
            pass
        key = nacl.signing.SigningKey(seed=key, encoder=nacl.encoding.Base32Encoder)
        retData = ''
        if encodeResult:
            retData = key.sign(data, encoder=nacl.encoding.Base64Encoder).signature.decode() # .encode() is not the same as nacl.encoding
        else:
            retData = key.sign(data).signature
        return retData

    def ed_verify(data, key, sig, encodedData=True):
        '''Verify signed data (combined in nacl) to an ed25519 key'''
        key = unpaddedbase32.repad(bytesconverter.str_to_bytes(key))
        try:
            key = nacl.signing.VerifyKey(key=key, encoder=nacl.encoding.Base32Encoder)
        except nacl.exceptions.ValueError:
            return False
        except binascii.Error:
            logger.warn('Could not load key for verification, invalid padding')
            return False
        retData = False
        sig = base64.b64decode(sig)
        try:
            data = data.encode()
        except AttributeError:
            pass
        try:
            retData = key.verify(data, sig) # .encode() is not the same as nacl.encoding
        except nacl.exceptions.BadSignatureError:
            pass
        return retData

## Functions

`def ed_sign(data, key, encodeResult=False)`

  Ed25519 sign data

  Expand source code

      def ed_sign(data, key, encodeResult=False):
          '''Ed25519 sign data'''
          key = unpaddedbase32.repad(bytesconverter.str_to_bytes(key))
          try:
              data = data.encode()
          except AttributeError:
              pass
          key = nacl.signing.SigningKey(seed=key, encoder=nacl.encoding.Base32Encoder)
          retData = ''
          if encodeResult:
              retData = key.sign(data, encoder=nacl.encoding.Base64Encoder).signature.decode() # .encode() is not the same as nacl.encoding
          else:
              retData = key.sign(data).signature
          return retData

`def ed_verify(data, key, sig, encodedData=True)`

  Verify signed data (combined in nacl) to an ed25519 key

  Expand source code

      def ed_verify(data, key, sig, encodedData=True):
          '''Verify signed data (combined in nacl) to an ed25519 key'''
          key = unpaddedbase32.repad(bytesconverter.str_to_bytes(key))
          try:
              key = nacl.signing.VerifyKey(key=key, encoder=nacl.encoding.Base32Encoder)
          except nacl.exceptions.ValueError:
              return False
          except binascii.Error:
              logger.warn('Could not load key for verification, invalid padding')
              return False
          retData = False
          sig = base64.b64decode(sig)
          try:
              data = data.encode()
          except AttributeError:
              pass
          try:
              retData = key.verify(data, sig) # .encode() is not the same as nacl.encoding
          except nacl.exceptions.BadSignatureError:
              pass
          return retData