Source code for cryptio.header

import logging
import os
from base64 import urlsafe_b64encode


[docs]class CryptHeader: _iv_length = 12 # 96 bits _tag_length = 16 # 128 bits def __init__(self, _file): self._file = _file self._pos = _file.tell() self.iv = None self.tag = None
[docs] def initialize(self): header_length = self._iv_length + self._tag_length self._file.seek(self._pos + header_length) self.iv = os.urandom(self._iv_length)
[docs] def write(self, tag=None): if tag: self.tag = tag assert self.iv is not None and len(self.iv) == self._iv_length assert self.tag is not None and len(self.tag) == self._tag_length self._file.seek(self._pos) self._file.write(self.iv) self._file.write(self.tag) logging.debug('write iv: {}'.format(urlsafe_b64encode(self.iv))) logging.debug('write tag: {}'.format(urlsafe_b64encode(self.tag)))
[docs] def read(self): self._file.seek(self._pos) self.iv = self._file.read(self._iv_length) self.tag = self._file.read(self._tag_length) logging.debug('read iv: {}'.format(urlsafe_b64encode(self.iv))) logging.debug('read tag: {}'.format(urlsafe_b64encode(self.tag)))