Beispiel #1
0
 def serialize_data(self, obj, encrypt=True):
     """Serialize secrets for storage on the card"""
     r = b""
     for k in self.KEYS:
         v = self.KEYS[k]
         if v in obj:
             r += k + bytes([len(obj[v])]) + obj[v]
     if encrypt:
         # smartcard encryption key
         key = tagged_hash("scenc", self.secret)
         # smartcard id to understand it's our data
         fingerprint = tagged_hash("scid", self.secret)[:4]
         res = aead_encrypt(key, self.MAGIC + fingerprint, r)
     else:
         # "unencrypted" data
         fingerprint = b"\x00" * 4
         res = aead_encrypt(b"\xcc" * 32, self.MAGIC + fingerprint, r)
     return res
Beispiel #2
0
 def save_aead(self, path, adata=b"", plaintext=b"", key=None):
     """Encrypts and saves plaintext and associated data to file"""
     if key is None:
         key = self.idkey
     if key is None:
         raise KeyStoreError("Pass the key please")
     d = aead_encrypt(key, adata, plaintext)
     with open(path, "wb") as f:
         f.write(d)
     platform.sync()
Beispiel #3
0
 def serialize_data(self, obj):
     """Serialize secrets for storage on the card"""
     r = b""
     for k in self.KEYS:
         v = self.KEYS[k]
         if v in obj:
             r += k + bytes([len(obj[v])]) + obj[v]
     # smartcard encryption key
     key = tagged_hash("scenc", self.secret)
     # smartcard id to understand it's our data
     fingerprint = tagged_hash("scid", self.secret)[:4]
     res = aead_encrypt(key, self.MAGIC + fingerprint, r)
     print(res)
     return res