PyNaCl supports a simple method of encoding and decoding messages in different formats. Encoders are simple classes with staticmethods that encode/decode and are typically passed as a keyword argument encoder to various methods.

For example you can generate a signing key and encode it in hex with:

hex_key = nacl.signing.SigningKey.generate().encode(encoder=nacl.encoding.HexEncoder)

Then you can later decode it from hex:

signing_key = nacl.signing.SigningKey(hex_key, encoder=nacl.encoding.HexEncoder)

Built in Encoders

class nacl.encoding.RawEncoder[source]
class nacl.encoding.HexEncoder[source]
class nacl.encoding.Base16Encoder[source]
class nacl.encoding.Base32Encoder[source]
class nacl.encoding.Base64Encoder[source]
class nacl.encoding.URLSafeBase64Encoder[source]

Defining your own Encoder

Defining your own encoder is easy. Each encoder is simply a class with 2 static methods. For example here is the hex encoder:

import binascii

class HexEncoder(object):

    def encode(data):
        return binascii.hexlify(data)

    def decode(data):
        return binascii.unhexlify(data)