splitU256ToU64Parts static method

List<BigInt> splitU256ToU64Parts(
  1. BigInt number, {
  2. Endian order = Endian.big,
})

Implementation

static List<BigInt> splitU256ToU64Parts(BigInt number,
    {Endian order = Endian.big}) {
  if (number.isNegative || number.bitLength > 256) {
    if (number.isNegative) {
      throw ArgumentException(
        'Invalid unsigned integer.',
        details: {'number': number.toString()},
      );
    }
    throw ArgumentException(
      'Number is too large for UInt256.',
      details: {'number': number.toString()},
    );
  }

  final BigInt hiHi = (number >> 192).toUnsigned(64);
  final BigInt hiLo = (number >> 128).toUnsigned(64);
  final BigInt loHi = (number >> 64).toUnsigned(64);
  final BigInt loLo = number.toUnsigned(64);

  // Return order depends on Endian type
  if (order == Endian.little) {
    // Matches Rust/Substrate `[u64;4]` layout (little-endian)
    return [loLo, loHi, hiLo, hiHi];
  } else {
    // Big-endian (most significant first)
    return [hiHi, hiLo, loHi, loLo];
  }
}