Beispiel #1
0
        public void IssueBlindedAssetParserTest()
        {
            byte[] groupId         = ConfidentialAssetsHelper.GetRandomSeed();
            ulong  syncBlockHeight = 1;
            uint   nonce           = 4;

            byte[] powHash     = BinaryHelper.GetPowHash(1234);
            ushort version     = 1;
            ulong  blockHeight = 9;

            byte[] body;
            ulong  uptodateFunds = 10001;

            byte[] assetCommitment = ConfidentialAssetsHelper.GetRandomSeed();
            byte[] mask            = ConfidentialAssetsHelper.GetRandomSeed();
            byte[] maskedAssetId   = ConfidentialAssetsHelper.GetRandomSeed();
            byte[] keyImage        = ConfidentialAssetsHelper.GetRandomSeed();
            byte[] c = ConfidentialAssetsHelper.GetRandomSeed();
            byte[] r = ConfidentialAssetsHelper.GetRandomSeed();

            using (MemoryStream ms = new MemoryStream())
            {
                using (BinaryWriter bw = new BinaryWriter(ms))
                {
                    bw.Write(uptodateFunds);
                    bw.Write(groupId);
                    bw.Write(assetCommitment);
                    //bw.Write(mask);
                    //bw.Write(maskedAssetId);
                    bw.Write(keyImage);
                    bw.Write(c);
                    bw.Write(r);
                }

                body = ms.ToArray();
            }

            byte[] packet = BinaryHelper.GetSignedPacket(PacketType.Transactional, syncBlockHeight, nonce, powHash, version,
                                                         BlockTypes.Transaction_TransferGroupedAssetsToUtxo, blockHeight, null, body, _privateKey, out byte[] expectedSignature);

            IssueBlindedAssetParser parser = new IssueBlindedAssetParser(_identityKeyProvidersRegistry);
            IssueBlindedAsset       block  = (IssueBlindedAsset)parser.Parse(packet);

            Assert.Equal(syncBlockHeight, block.SyncBlockHeight);
            Assert.Equal(nonce, block.Nonce);
            Assert.Equal(powHash, block.PowHash);
            Assert.Equal(version, block.Version);
            Assert.Equal(blockHeight, block.BlockHeight);
            Assert.Equal(uptodateFunds, block.UptodateFunds);
            Assert.Equal(groupId, block.GroupId);
            Assert.Equal(assetCommitment, block.AssetCommitment);
            Assert.Equal(keyImage, block.KeyImage);
            Assert.Equal(c, block.UniquencessProof.C);
            Assert.Equal(r, block.UniquencessProof.R);
            Assert.Equal(expectedSignature, block.Signature.ToArray());
        }
Beispiel #2
0
        protected override Memory <byte> ParseTransactional(ushort version, Memory <byte> spanBody, out TransactionalPacketBase transactionalBlockBase)
        {
            IssueBlindedAsset block = null;

            if (version == 1)
            {
                int readBytes = 0;

                byte[] groupId = spanBody.Slice(readBytes, Globals.NODE_PUBLIC_KEY_SIZE).ToArray();
                readBytes += Globals.NODE_PUBLIC_KEY_SIZE;

                byte[] assetCommitment = spanBody.Slice(readBytes, Globals.NODE_PUBLIC_KEY_SIZE).ToArray();
                readBytes += Globals.NODE_PUBLIC_KEY_SIZE;

                byte[] keyImage = spanBody.Slice(readBytes, Globals.NODE_PUBLIC_KEY_SIZE).ToArray();
                readBytes += Globals.NODE_PUBLIC_KEY_SIZE;

                byte[] ringSignatureC = spanBody.Slice(readBytes, Globals.NODE_PUBLIC_KEY_SIZE).ToArray();
                readBytes += Globals.NODE_PUBLIC_KEY_SIZE;

                byte[] ringSignatureR = spanBody.Slice(readBytes, Globals.NODE_PUBLIC_KEY_SIZE).ToArray();
                readBytes += Globals.NODE_PUBLIC_KEY_SIZE;

                block = new IssueBlindedAsset
                {
                    GroupId          = groupId,
                    AssetCommitment  = assetCommitment,
                    KeyImage         = keyImage,
                    UniquencessProof = new RingSignature
                    {
                        C = ringSignatureC,
                        R = ringSignatureR
                    }
                };

                transactionalBlockBase = block;
                return(spanBody.Slice(readBytes));
            }

            throw new BlockVersionNotSupportedException(version, BlockType);
        }
Beispiel #3
0
        public void IssueBlindedAssetSerializerTest()
        {
            byte[] groupId         = ConfidentialAssetsHelper.GetRandomSeed();
            ulong  syncBlockHeight = 1;
            uint   nonce           = 4;

            byte[] powHash     = BinaryHelper.GetPowHash(1234);
            ushort version     = 1;
            ulong  blockHeight = 9;

            byte[] body;

            ulong uptodateFunds = 10001;

            byte[] assetCommitment = ConfidentialAssetsHelper.GetRandomSeed();
            byte[] keyImage        = ConfidentialAssetsHelper.GetRandomSeed();
            byte[] c = ConfidentialAssetsHelper.GetRandomSeed();
            byte[] r = ConfidentialAssetsHelper.GetRandomSeed();

            using (MemoryStream ms = new MemoryStream())
            {
                using (BinaryWriter bw = new BinaryWriter(ms))
                {
                    bw.Write(uptodateFunds);
                    bw.Write(groupId);
                    bw.Write(assetCommitment);
                    bw.Write(keyImage);
                    bw.Write(c);
                    bw.Write(r);
                }

                body = ms.ToArray();
            }

            byte[] expectedPacket = BinaryHelper.GetSignedPacket(PacketType.Transactional, syncBlockHeight, nonce, powHash, version,
                                                                 BlockTypes.Transaction_IssueBlindedAsset, blockHeight, null, body, _privateKey, out byte[] expectedSignature);

            IssueBlindedAsset issueBlindedAsset = new IssueBlindedAsset
            {
                SyncBlockHeight  = syncBlockHeight,
                Nonce            = nonce,
                PowHash          = powHash,
                BlockHeight      = blockHeight,
                GroupId          = groupId,
                UptodateFunds    = uptodateFunds,
                AssetCommitment  = assetCommitment,
                KeyImage         = keyImage,
                UniquencessProof = new RingSignature
                {
                    C = c,
                    R = r
                }
            };

            IssueBlindedAssetSerializer serializer = new IssueBlindedAssetSerializer();

            serializer.Initialize(issueBlindedAsset);
            serializer.SerializeBody();
            _signingService.Sign(issueBlindedAsset);

            byte[] actualPacket = serializer.GetBytes();

            Assert.Equal(expectedPacket, actualPacket);
        }