public async Task <byte[]> DecryptToBytes(ICipherText cipherText, IPublicKey publicKey, ISecretKey secretKey) { try { var cipherTextFile = await LocalHost.WriteFileAsync(cipherText.Value); var publicKeyFile = await LocalHost.WriteFileAsync(publicKey.Value); var secretKeyFile = await LocalHost.WriteFileAsync(secretKey.Value); var messageFile = LocalHost.GetRandomFilename(); await LocalHost.RunProcessAsync("cpabe-dec", $"-o {messageFile} {publicKeyFile} {secretKeyFile} {cipherTextFile}"); var messageBytes = await LocalHost.ReadFileAsync(messageFile); File.Delete(publicKeyFile); File.Delete(secretKeyFile); return(messageBytes); } catch (Exception exception) { if (exception.Message.Contains("cannot decrypt")) { throw new UnathorizedAttributesAccessException(); } throw new ABESchemeException("Error has occured during decryption", exception); } }
public async Task <string> Decrypt(ICipherText cipherText, IPublicKey publicKey, ISecretKey secretKey) { var res = await DecryptToBytes(cipherText, publicKey, secretKey); return(Encoding.UTF8.GetString(res)); }