17db96d56Sopenharmony_ci"""Python 'hex_codec' Codec - 2-digit hex content transfer encoding.
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciThis codec de/encodes from bytes to bytes.
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciWritten by Marc-Andre Lemburg (mal@lemburg.com).
67db96d56Sopenharmony_ci"""
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ciimport codecs
97db96d56Sopenharmony_ciimport binascii
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci### Codec APIs
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_cidef hex_encode(input, errors='strict'):
147db96d56Sopenharmony_ci    assert errors == 'strict'
157db96d56Sopenharmony_ci    return (binascii.b2a_hex(input), len(input))
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_cidef hex_decode(input, errors='strict'):
187db96d56Sopenharmony_ci    assert errors == 'strict'
197db96d56Sopenharmony_ci    return (binascii.a2b_hex(input), len(input))
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ciclass Codec(codecs.Codec):
227db96d56Sopenharmony_ci    def encode(self, input, errors='strict'):
237db96d56Sopenharmony_ci        return hex_encode(input, errors)
247db96d56Sopenharmony_ci    def decode(self, input, errors='strict'):
257db96d56Sopenharmony_ci        return hex_decode(input, errors)
267db96d56Sopenharmony_ci
277db96d56Sopenharmony_ciclass IncrementalEncoder(codecs.IncrementalEncoder):
287db96d56Sopenharmony_ci    def encode(self, input, final=False):
297db96d56Sopenharmony_ci        assert self.errors == 'strict'
307db96d56Sopenharmony_ci        return binascii.b2a_hex(input)
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ciclass IncrementalDecoder(codecs.IncrementalDecoder):
337db96d56Sopenharmony_ci    def decode(self, input, final=False):
347db96d56Sopenharmony_ci        assert self.errors == 'strict'
357db96d56Sopenharmony_ci        return binascii.a2b_hex(input)
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ciclass StreamWriter(Codec, codecs.StreamWriter):
387db96d56Sopenharmony_ci    charbuffertype = bytes
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ciclass StreamReader(Codec, codecs.StreamReader):
417db96d56Sopenharmony_ci    charbuffertype = bytes
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci### encodings module API
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_cidef getregentry():
467db96d56Sopenharmony_ci    return codecs.CodecInfo(
477db96d56Sopenharmony_ci        name='hex',
487db96d56Sopenharmony_ci        encode=hex_encode,
497db96d56Sopenharmony_ci        decode=hex_decode,
507db96d56Sopenharmony_ci        incrementalencoder=IncrementalEncoder,
517db96d56Sopenharmony_ci        incrementaldecoder=IncrementalDecoder,
527db96d56Sopenharmony_ci        streamwriter=StreamWriter,
537db96d56Sopenharmony_ci        streamreader=StreamReader,
547db96d56Sopenharmony_ci        _is_text_encoding=False,
557db96d56Sopenharmony_ci    )
56