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