# decryptRangeWith

> **decryptRangeWith**(`source`, `unwrapper`, `range`, `options?`): [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`RangeResult`](/reference/filoz/filecoin-encryption-envelope/interfaces/rangeresult/)\>

Defined in: [packages/filecoin-encryption-envelope/src/range/decrypt.ts:288](https://github.com/FilOzone/synapse-sdk/blob/30608dd46e68d704a96d7ed7c24717c948ec4e4b/packages/filecoin-encryption-envelope/src/range/decrypt.ts#L288)

Like `decryptRange`, but recovers the CEK from the envelope's recipients
through `unwrapper`.

- Tag 96 only: a tag-16 object fails with `NoUsableRecipientError` without
  calling `unwrapper`.
- `unwrapper` is called once, with copies of every recipient in wire order,
  also when `options.params` skips the envelope read; its CEK is validated.
- The range is planned first and the key recovered before the promise
  settles, so recipient failures reject it, never the stream.

## Parameters

| Parameter | Type |
| ------ | ------ |
| `source` | [`Uint8Array`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)\<`ArrayBufferLike`\> \| [`RandomAccessSource`](/reference/filoz/filecoin-encryption-envelope/interfaces/randomaccesssource/) |
| `unwrapper` | [`Unwrapper`](/reference/filoz/filecoin-encryption-envelope/namespaces/recipients/type-aliases/unwrapper/) |
| `range` | [`ByteRange`](/reference/filoz/filecoin-encryption-envelope/interfaces/byterange/) |
| `options?` | `RangeDecryptOptions` |

## Returns

[`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`RangeResult`](/reference/filoz/filecoin-encryption-envelope/interfaces/rangeresult/)\>