protected override void SetupWriter(AudioData audio) { var encodingConfig = new CriHcaParameters { Progress = Configuration.Progress, Bitrate = Configuration.Bitrate, LimitBitrate = Configuration.LimitBitrate }; if (Configuration.Quality != CriHcaQuality.NotSet) { encodingConfig.Quality = Configuration.Quality; } var hcaFormat = audio.GetFormat <CriHcaFormat>(encodingConfig); Hca = hcaFormat.Hca; AudioData = hcaFormat.AudioData; if (Configuration.EncryptionKey != null) { CriHcaEncryption.Crypt(Hca, AudioData, Configuration.EncryptionKey, false); Hca.EncryptionType = Configuration.EncryptionKey.KeyType; } }
protected override IAudioFormat ToAudioStream(HcaStructure structure) { if (structure.EncryptionKey != null) { CriHcaEncryption.Decrypt(structure.Hca, structure.AudioData, structure.EncryptionKey); } return(new CriHcaFormatBuilder(structure.AudioData, structure.Hca).Build()); }
private static CriHcaKey FindKey(HcaStructure structure) { switch (structure.Hca.EncryptionType) { case 0: return(null); case 1: return(new CriHcaKey(CriHcaKey.Type.Type1)); case 56: return(CriHcaEncryption.FindKey(structure.Hca, structure.AudioData) ?? throw new InvalidDataException("Cannot find key to decrypt HCA file.")); default: return(null); } }