public static byte[] GetSentTransfer20151004ArgsHmacAuthCode( SendTransfer20151004Args request, byte[] hmacKey ) { Assert.NotNull(request); CheckSentTransfer20151004Args(request); Assert.NotNull(hmacKey); Assert.Equal(hmacKey.Length, 64); using (var ms = new MemoryStream()) { var converter = new LittleEndianBitConverter(); using (var littleStream = new EndianBinaryWriter(converter, ms)) { littleStream.Write(request.RequestGuid.ToByteArray()); var dt = DateTime.ParseExact( request.SentTimeString, DateTimeStringFormat20151004, CultureInfo.InvariantCulture ); littleStream.Write(dt.Ticks); littleStream.Write(request.WalletFromGuid.ToByteArray()); littleStream.Write(request.WalletToGuid.ToByteArray()); littleStream.Write(request.Amount); littleStream.Write(request.AnonymousTransfer); littleStream.Write(request.CommentBytes); littleStream.Write(request.MaxFee); } return new HMACSHA256(hmacKey).ComputeHash(ms.ToArray()); } }
public static void CheckSentTransfer20151004Args( SendTransfer20151004Args args ) { DateTime dt; try { Assert.NotNull(args); Assert.NotEqual(args.WalletFromGuid,Guid.Empty); Assert.NotEqual(args.WalletToGuid,Guid.Empty); Assert.InRange( args.Amount, 1, int.MaxValue ); Assert.NotNull(args.CommentBytes); Assert.True(args.CommentBytes.Length <= 64000); Assert.False(string.IsNullOrWhiteSpace(args.SentTimeString)); dt = DateTime.ParseExact( args.SentTimeString, DateTimeStringFormat20151004, CultureInfo.InvariantCulture ); Assert.InRange( args.MaxFee, 0, int.MaxValue ); } catch { throw EnumException.Create( EGeneralWalletLocalApiErrorCodes20151004.WrongArgs); } try { var nowTimeUtc = DateTime.UtcNow; Assert.InRange( dt, nowTimeUtc.Subtract(TimeSpan.FromMinutes(5.0)), nowTimeUtc.AddMinutes(5) ); } catch { throw EnumException.Create( EGeneralWalletLocalApiErrorCodes20151004.RequestLifetimeExpired); } }