1*cda5da8dSAndroid Build Coastguard Worker"""Python 'hex_codec' Codec - 2-digit hex content transfer encoding. 2*cda5da8dSAndroid Build Coastguard Worker 3*cda5da8dSAndroid Build Coastguard WorkerThis codec de/encodes from bytes to bytes. 4*cda5da8dSAndroid Build Coastguard Worker 5*cda5da8dSAndroid Build Coastguard WorkerWritten by Marc-Andre Lemburg ([email protected]). 6*cda5da8dSAndroid Build Coastguard Worker""" 7*cda5da8dSAndroid Build Coastguard Worker 8*cda5da8dSAndroid Build Coastguard Workerimport codecs 9*cda5da8dSAndroid Build Coastguard Workerimport binascii 10*cda5da8dSAndroid Build Coastguard Worker 11*cda5da8dSAndroid Build Coastguard Worker### Codec APIs 12*cda5da8dSAndroid Build Coastguard Worker 13*cda5da8dSAndroid Build Coastguard Workerdef hex_encode(input, errors='strict'): 14*cda5da8dSAndroid Build Coastguard Worker assert errors == 'strict' 15*cda5da8dSAndroid Build Coastguard Worker return (binascii.b2a_hex(input), len(input)) 16*cda5da8dSAndroid Build Coastguard Worker 17*cda5da8dSAndroid Build Coastguard Workerdef hex_decode(input, errors='strict'): 18*cda5da8dSAndroid Build Coastguard Worker assert errors == 'strict' 19*cda5da8dSAndroid Build Coastguard Worker return (binascii.a2b_hex(input), len(input)) 20*cda5da8dSAndroid Build Coastguard Worker 21*cda5da8dSAndroid Build Coastguard Workerclass Codec(codecs.Codec): 22*cda5da8dSAndroid Build Coastguard Worker def encode(self, input, errors='strict'): 23*cda5da8dSAndroid Build Coastguard Worker return hex_encode(input, errors) 24*cda5da8dSAndroid Build Coastguard Worker def decode(self, input, errors='strict'): 25*cda5da8dSAndroid Build Coastguard Worker return hex_decode(input, errors) 26*cda5da8dSAndroid Build Coastguard Worker 27*cda5da8dSAndroid Build Coastguard Workerclass IncrementalEncoder(codecs.IncrementalEncoder): 28*cda5da8dSAndroid Build Coastguard Worker def encode(self, input, final=False): 29*cda5da8dSAndroid Build Coastguard Worker assert self.errors == 'strict' 30*cda5da8dSAndroid Build Coastguard Worker return binascii.b2a_hex(input) 31*cda5da8dSAndroid Build Coastguard Worker 32*cda5da8dSAndroid Build Coastguard Workerclass IncrementalDecoder(codecs.IncrementalDecoder): 33*cda5da8dSAndroid Build Coastguard Worker def decode(self, input, final=False): 34*cda5da8dSAndroid Build Coastguard Worker assert self.errors == 'strict' 35*cda5da8dSAndroid Build Coastguard Worker return binascii.a2b_hex(input) 36*cda5da8dSAndroid Build Coastguard Worker 37*cda5da8dSAndroid Build Coastguard Workerclass StreamWriter(Codec, codecs.StreamWriter): 38*cda5da8dSAndroid Build Coastguard Worker charbuffertype = bytes 39*cda5da8dSAndroid Build Coastguard Worker 40*cda5da8dSAndroid Build Coastguard Workerclass StreamReader(Codec, codecs.StreamReader): 41*cda5da8dSAndroid Build Coastguard Worker charbuffertype = bytes 42*cda5da8dSAndroid Build Coastguard Worker 43*cda5da8dSAndroid Build Coastguard Worker### encodings module API 44*cda5da8dSAndroid Build Coastguard Worker 45*cda5da8dSAndroid Build Coastguard Workerdef getregentry(): 46*cda5da8dSAndroid Build Coastguard Worker return codecs.CodecInfo( 47*cda5da8dSAndroid Build Coastguard Worker name='hex', 48*cda5da8dSAndroid Build Coastguard Worker encode=hex_encode, 49*cda5da8dSAndroid Build Coastguard Worker decode=hex_decode, 50*cda5da8dSAndroid Build Coastguard Worker incrementalencoder=IncrementalEncoder, 51*cda5da8dSAndroid Build Coastguard Worker incrementaldecoder=IncrementalDecoder, 52*cda5da8dSAndroid Build Coastguard Worker streamwriter=StreamWriter, 53*cda5da8dSAndroid Build Coastguard Worker streamreader=StreamReader, 54*cda5da8dSAndroid Build Coastguard Worker _is_text_encoding=False, 55*cda5da8dSAndroid Build Coastguard Worker ) 56