예제 #1
0
def _encrypt(keyset: tink_pb2.Keyset,
             master_key_primitive: aead.Aead) -> tink_pb2.EncryptedKeyset:
    """Encrypts a Keyset and returns an EncryptedKeyset."""
    encrypted_keyset = master_key_primitive.encrypt(keyset.SerializeToString(),
                                                    b'')
    # Check if we can decrypt, to detect errors
    try:
        keyset2 = tink_pb2.Keyset.FromString(
            master_key_primitive.decrypt(encrypted_keyset, b''))
        if keyset != keyset2:
            raise tink_error.TinkError('cannot encrypt keyset: %s != %s' %
                                       (keyset, keyset2))
    except message.DecodeError:
        raise tink_error.TinkError('invalid keyset, corrupted key material')
    return tink_pb2.EncryptedKeyset(encrypted_keyset=encrypted_keyset,
                                    keyset_info=_keyset_info(keyset))
예제 #2
0
def _decrypt(encrypted_keyset: tink_pb2.EncryptedKeyset,
             master_key_aead: aead.Aead) -> tink_pb2.Keyset:
    """Decrypts an EncryptedKeyset and returns a Keyset."""
    try:
        keyset = tink_pb2.Keyset.FromString(
            master_key_aead.decrypt(encrypted_keyset.encrypted_keyset, b''))
        # Check emptiness here too, in case the encrypted keys unwrapped to nothing?
        _assert_enough_key_material(keyset)
        return keyset
    except message.DecodeError:
        raise tink_error.TinkError('invalid keyset, corrupted key material')