/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once namespace Passport { bytes::vector GenerateSecretBytes(); bytes::vector EncryptSecureSecret( bytes::const_span secret, bytes::const_span passwordHashForSecret); bytes::vector DecryptSecureSecret( bytes::const_span encryptedSecret, bytes::const_span passwordHashForSecret); bytes::vector SerializeData(const std::map &data); std::map DeserializeData(bytes::const_span bytes); struct DataError { // QByteArray - bad existing scan with such file_hash // QString - bad data field value with such key // std::nullopt - additional scan required std::variant key; QString type; // personal_details, passport, etc. QString text; }; std::vector DeserializeErrors(bytes::const_span json); struct EncryptedData { bytes::vector secret; bytes::vector hash; bytes::vector bytes; }; EncryptedData EncryptData(bytes::const_span bytes); EncryptedData EncryptData( bytes::const_span bytes, bytes::const_span dataSecret); bytes::vector DecryptData( bytes::const_span encrypted, bytes::const_span dataHash, bytes::const_span dataSecret); bytes::vector PrepareValueHash( bytes::const_span dataHash, bytes::const_span valueSecret); bytes::vector EncryptValueSecret( bytes::const_span valueSecret, bytes::const_span secret, bytes::const_span valueHash); bytes::vector DecryptValueSecret( bytes::const_span encrypted, bytes::const_span secret, bytes::const_span valueHash); uint64 CountSecureSecretId(bytes::const_span secret); bytes::vector EncryptCredentialsSecret( bytes::const_span secret, bytes::const_span publicKey); } // namespace Passport