using System.Threading;
using System.Threading.Tasks;
using GB5Shared.DTO.Framework.Login;
namespace FrameworkBLL.Promotion
{
// ============================================================
// IPromotionPackageCrypto — hybrid RSA+AES-GCM encryption for Metadata
// Promotion's Tier 1 package transport (see the plan's Transport section).
// Asymmetric so no shared secret is ever needed between environments that
// may not even trust each other's network: the destination's public key
// encrypts a random per-package AES-256 key, which does the actual bulk
// encryption (RSA alone can't handle payloads larger than its key size).
// ============================================================
public interface IPromotionPackageCrypto
{
/// Encrypts plaintext to the named destination's registered public key
/// (MPROMOTIONCOUNTERPARTY). Throws if no active counterparty is registered for
/// destinationEnvironmentCode.
Task EncryptPackageAsync(
byte[] plaintext, string destinationEnvironmentCode, LoginDTO login, CancellationToken ct);
/// Decrypts a package using THIS deployment's own private key (Vault-stored,
/// never accepted from any request). Throws if the package's format version is
/// unrecognized or decryption fails (wrong key, tampered payload).
Task DecryptPackageAsync(byte[] encryptedPackage, CancellationToken ct);
}
}