/// <summary> /// Serializes the provided <paramref name="value"/> /// </summary> /// <param name="value">The value to be serialized</param> /// <returns> /// An array of bytes with length 8. /// </returns> /// <exception cref="MicrosoftDataEncryptionException"> /// <paramref name="value"/> is out of range. /// </exception> public override byte[] Serialize(double value) { if (double.IsInfinity(value) || double.IsNaN(value)) { throw new MicrosoftDataEncryptionException(ValueOutOfRange.Format(value)); } return(GetBytes(value)); }
/// <summary> /// Serializes the provided <paramref name="value"/> /// </summary> /// <param name="value">The value to be serialized</param> /// <returns> /// An array of bytes with length 8. /// </returns> /// <exception cref="MicrosoftDataEncryptionException"> /// <paramref name="value"/> is out of range. /// </exception> public override byte[] Serialize(decimal value) { if (value < MinValue || value > MaxValue) { throw new MicrosoftDataEncryptionException(ValueOutOfRange.Format(value)); } return(sqlMoneySerializer.Serialize(value)); }
/// <summary> /// Serializes the provided <paramref name="value"/> /// </summary> /// <param name="value">The value to be serialized</param> /// <returns> /// An array of bytes with length 8. /// </returns> /// <exception cref="MicrosoftDataEncryptionException"> /// <paramref name="value"/> is out of range. /// </exception> public override byte[] Serialize(DateTime value) { if (value < MinValue) { throw new MicrosoftDataEncryptionException(ValueOutOfRange.Format(value)); } SqlDateTime sqlDateTime = new SqlDateTime(value); byte[] dayTicks = GetBytes(sqlDateTime.DayTicks); byte[] timeTicks = GetBytes(sqlDateTime.TimeTicks); return(dayTicks.Concat(timeTicks).ToArray()); }
/// <summary> /// Serializes the provided <paramref name="value"/> /// </summary> /// <param name="value">The value to be serialized</param> /// <returns> /// An array of bytes with length 4. /// </returns> /// <exception cref="MicrosoftDataEncryptionException"> /// <paramref name="value"/> is out of range. /// </exception> public override byte[] Serialize(DateTime value) { if (value < MinValue || value > MaxValue) { throw new MicrosoftDataEncryptionException(ValueOutOfRange.Format(value)); } SqlDateTime sqlDateTime = new SqlDateTime(value.AddSeconds(30)); byte[] dayTicks = GetBytes((short)sqlDateTime.DayTicks); byte[] timeTicks = GetBytes((short)(sqlDateTime.TimeTicks / SqlDateTime.SQLTicksPerMinute)); return(dayTicks.Concat(timeTicks).ToArray()); }
/// <summary> /// Serializes the provided <paramref name="value"/> /// </summary> /// <param name="value">The value to be serialized</param> /// <returns> /// An array of bytes with length 8. /// </returns> /// <exception cref="MicrosoftDataEncryptionException"> /// <paramref name="value"/> is out of range. /// </exception> public override byte[] Serialize(decimal value) { if (value < MinValue || value > MaxValue) { throw new MicrosoftDataEncryptionException(ValueOutOfRange.Format(value)); } value = Normalize(value); int sign = value > -1 ? 1 : -1; int[] decimalBits = decimal.GetBits(value); long longValue = ((long)decimalBits[1] << 32) + (uint)decimalBits[0]; long signedLongValue = longValue * sign; int low = (int)(signedLongValue >> 32); int mid = (int)signedLongValue; byte[] lowbytes = GetBytes(low); byte[] midBytes = GetBytes(mid); return(lowbytes.Concat(midBytes).ToArray()); }