Ejemplo n.º 1
0
 def _decrypt_val(self, objID, val):
     t = get_type_name(val)
     P = PDF_TYPE_NAME
     this_f = self.decrypt_val
     if t == P.PDF_ARRAY:
         f = lambda val: this_f(objID, val)
         return list(map(f, val))
     if t == P.PDF_DICT:
         # f = lambda (key, val): (key, this_f(objID, val))
         def f(pair):
             key, val = pair
             return key, this_f(objID, val)
         return dict(map(f, val.items()))
     if t == P.PDF_STRING:
         s = PdfStr(self.decrypt_bytes(objID, val.get()))
         return s
         print('decrypted string: {!r}'.format(s))
         print('decrypted string: {!r}'.format(bytes(s).decode('utf8')))
         return s
     if t == P.PDF_STREAM:
         d, data = val.get()
         return PdfStream((d, self.decrypt_bytes(objID, data)))
     if t in ( P.PDF_INT
             , P.PDF_FLOAT
             , P.PDF_NULL
             , P.PDF_NAME
             , P.PDF_BOOL
             , P.PDF_REF
             ):
         return val
Ejemplo n.º 2
0
def write_array(file, ls):
    assert get_type_name(ls) == PDF_TYPE_NAME.PDF_ARRAY
    wb = file.wb
    wb(b'[')
    for obj in ls:
        write_obj(file, obj)
        wb(b' ')
    wb(b']')
Ejemplo n.º 3
0
def write_ref(file, ref):
    assert get_type_name(ref) == PDF_TYPE_NAME.PDF_REF
    wb = file.wb
    objNum, genNum = ref.get()
    write_int(file, objNum)
    wb(b' ')
    write_int(file, genNum)
    wb(b' R')
Ejemplo n.º 4
0
def write_stream(file, stream):
    assert get_type_name(stream) == PDF_TYPE_NAME.PDF_STREAM
    d, data = stream.get()
    wb = file.wb
    write_dict(file, d)
    wb(b'\nstream\n')
    wb(data)
    wb(b'\nendstream')
Ejemplo n.º 5
0
def write_dict(file, d):
    assert get_type_name(d) == PDF_TYPE_NAME.PDF_DICT
    wb = file.wb
    wb(b'<<')
    for name, obj in sorted(d.items()):
        write_name(file, name)
        # with ' '
        wb(b' ')
        write_obj(file, obj)
    wb(b'>>')
Ejemplo n.º 6
0
def get_encryption_dict(objID2val, trailer_dict):
    encryption_dict_or_ref = trailer_dict.get(b'/Encrypt')
    if encryption_dict_or_ref is None:
        raise NotEncrypted('not encrypted')
    if get_type_name(encryption_dict_or_ref) == PDF_TYPE_NAME.PDF_REF:
        # ref
        ref = encryption_dict_or_ref
        objID = ref.get()
        encryption_dict = resolve_to_final__val(objID2val, objID)
    else:
        encryption_dict = encryption_dict_or_ref

    tn = get_type_name(encryption_dict)
    if tn == PDF_TYPE_NAME.PDF_NULL:
        # null ==>> no /Encrypt key
        raise NotEncrypted('not encrypted')
    if tn != PDF_TYPE_NAME.PDF_DICT:
        raise Exception('TypeError: value of encryption_dict is not a dict')
    return encryption_dict
Ejemplo n.º 7
0
 def decrypt_val(self, objID, val):
     val = self._decrypt_val(objID, val)
     get_type_name(val) # verify
     return val
Ejemplo n.º 8
0
def write_obj(file, obj):
    t = get_type_name(obj)
    typename2writer[t](file, obj)
Ejemplo n.º 9
0
def write_XXX(file, XXX):
    assert get_type_name(XXX) == PDF_TYPE_NAME.PDF_
    file.wb(XXX)
Ejemplo n.º 10
0
def write_string(file, string):
    assert get_type_name(string) == PDF_TYPE_NAME.PDF_STRING
    wb = file.wb
    wb(b'<')
    wb(encodeToHex(string.get()))
    wb(b'>')
Ejemplo n.º 11
0
def write_bool(file, bool):
    assert get_type_name(bool) == PDF_TYPE_NAME.PDF_BOOL
    file.wb(b'true' if bool else b'false')
Ejemplo n.º 12
0
def write_float(file, float):
    assert get_type_name(float) == PDF_TYPE_NAME.PDF_FLOAT
    file.wb(float.get())
Ejemplo n.º 13
0
def write_null(file, null):
    assert get_type_name(null) == PDF_TYPE_NAME.PDF_NULL
    file.wb(b'null')
Ejemplo n.º 14
0
def write_name(file, name):
    assert get_type_name(name) == PDF_TYPE_NAME.PDF_NAME
    # bug: without escape
    #   file.wb(name)
    file.wb(escape_name(name))
Ejemplo n.º 15
0
def write_int(file, i):
    assert get_type_name(i) == PDF_TYPE_NAME.PDF_INT
    file.ws(str(i))