public async Task<Hash> PutAsync(long id, SemanticVersion version, IPackage package) { #region Preconditions if (package == null) throw new ArgumentNullException(nameof(package)); #endregion var key = id.ToString() + "/" + version.ToString(); using (var ms = new MemoryStream()) { await package.ZipToStreamAsync(ms).ConfigureAwait(false); var hash = Hash.ComputeSHA256(ms, leaveOpen: true); var blob = new Blob(ms) { ContentType = "application/zip" }; await bucket.PutAsync(key, blob).ConfigureAwait(false); return hash; } }
public async Task<Hash> PutAsync(long id, SemanticVersion version, IPackage package) { var key = prefix + id.ToString() + "/" + version.ToString(); using (var ms = new MemoryStream()) { await package.ZipToStreamAsync(ms).ConfigureAwait(false); ms.Position = 0; var hash = Hash.ComputeSHA256(ms, leaveOpen: true); var secret = SecretKey.Derive(password, hash.Data); using (var protector = new AesProtector(secret)) { using (var packageStream = protector.EncryptStream(ms)) { var blob = new Blob(packageStream) { ContentType = "application/zip" }; await bucket.PutAsync(key, blob).ConfigureAwait(false); } } return hash; } }