Chunkify 'base64' format for age plugin
This commit is contained in:
@@ -11,6 +11,7 @@ import argparse
|
|||||||
import base64
|
import base64
|
||||||
import contextlib
|
import contextlib
|
||||||
import datetime
|
import datetime
|
||||||
|
import io
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
@@ -65,9 +66,15 @@ def base64_decode(encoded: str) -> bytes:
|
|||||||
return base64.b64decode(encoded + ("=" * pad))
|
return base64.b64decode(encoded + ("=" * pad))
|
||||||
|
|
||||||
|
|
||||||
|
# https://github.com/FiloSottile/age/blob/v1.1.0-rc.1/internal/format/format.go#L45
|
||||||
|
BYTES_PER_LINE = 48
|
||||||
|
|
||||||
def base64_encode(data: bytes) -> str:
|
def base64_encode(data: bytes) -> str:
|
||||||
"""Encode data using Base64 (and remove '=')."""
|
"""Encode data using Base64 (and remove '=')."""
|
||||||
return base64.b64encode(data).replace(b"=", b"").decode()
|
reader = io.BytesIO(data)
|
||||||
|
chunks = map(base64.b64encode, iter(lambda: reader.read(BYTES_PER_LINE), b""))
|
||||||
|
chunks = (chunk.replace(b"=", b"") for chunk in chunks)
|
||||||
|
return b"\n".join(chunks).decode()
|
||||||
|
|
||||||
|
|
||||||
def decrypt(key, encrypted):
|
def decrypt(key, encrypted):
|
||||||
@@ -124,9 +131,10 @@ def run_decrypt(device_type, args):
|
|||||||
|
|
||||||
def _handle_single_file(file_index, stanzas, identities, c):
|
def _handle_single_file(file_index, stanzas, identities, c):
|
||||||
d = c.device.__class__.__name__
|
d = c.device.__class__.__name__
|
||||||
msg = base64_encode(f'Please confirm decryption on {d} device...'.encode())
|
|
||||||
for peer_pubkey, encrypted in stanzas:
|
for peer_pubkey, encrypted in stanzas:
|
||||||
for identity in identities:
|
for identity in identities:
|
||||||
|
id_str = identity.to_string()
|
||||||
|
msg = base64_encode(f'Please confirm {id_str} decryption on {d} device...'.encode())
|
||||||
sys.stdout.write(f'-> msg\n{msg}\n')
|
sys.stdout.write(f'-> msg\n{msg}\n')
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user