示例#1
0
        public static byte[] EncryptBytes(byte[] byteText)
        {
            var aes = Aes.Create();

            aes.KeySize   = 256;
            aes.BlockSize = 128;
            aes.Mode      = CipherMode.CBC;

            // This Salt & IV was ported in from Biblepay-QT
            string sSalt = "eb5a781ea9da2ef36";
            string sKey  = "biblepay";

            byte[] bytesSalt = System.Text.Encoding.ASCII.GetBytes(sSalt);
            byte[] bytesKey  = System.Text.Encoding.ASCII.GetBytes(sKey);

            // These static bytes were ported in from Biblepay-QT, because OpenSSL uses a proprietary method to create the 256 bit AES-CBC key: EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha512()
            string sAdvancedKey = "98,-5,23,119,-28,-99,-5,90,62,-63,82,39,63,-67,-85,37,-29,-65,97,80,57,-24,71,67,119,14,-67,12,-96,99,-84,-97";
            string sIV          = "29,44,121,61,-19,-62,55,-119,114,105,-123,-101,52,-45,29,-109";
            var    vKey         = sAdvancedKey.Split(new string[] { "," }, StringSplitOptions.None);
            var    vIV          = sIV.Split(new string[] { "," }, StringSplitOptions.None);

            byte[] myBytedKey = new byte[32];
            byte[] myBytedIV  = new byte[16];

            for (int i = 0; i < vKey.Length; i++)
            {
                int iMyKey = (int)BibleHash.cdbl(vKey[i], 0);
                myBytedKey[i] = (byte)(iMyKey + 0);
            }
            for (int i = 0; i < vIV.Length; i++)
            {
                int iMyIV = (int)BibleHash.cdbl(vIV[i], 0);
                myBytedIV[i] = (byte)(iMyIV + 0);
            }

            aes.Key = myBytedKey;
            aes.IV  = myBytedIV;
            byte[]     encrypted;
            HexEncoder he = new HexEncoder();

            string keyHex       = he.EncodeData(myBytedKey);
            string keyIV        = he.EncodeData(myBytedIV);
            string sBytedKeyHex = BibleHash.ByteArrayToHexString(myBytedKey);
            string sBytedIVHex  = BibleHash.ByteArrayToHexString(myBytedIV);

            using (MemoryStream ms = new MemoryStream())
            {
                using (var cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(byteText, 0, byteText.Length);
                    cs.FlushFinalBlock();
                }
                encrypted = ms.ToArray();
            }
            return(encrypted);
        }
示例#2
0
        public override string ToString()
        {
            var bytes = ToBytes();

            Array.Reverse(bytes);
            return(Encoder.EncodeData(bytes));
        }
示例#3
0
        public void TestExtract()
        {
            var extractVectors = (ReadJson("extract.json"));

            Assert.NotEmpty(extractVectors);
            foreach (var token in extractVectors)
            {
                var a            = ((JObject)token).GetValue("a").ToString();
                var extractedKey = new byte[ExtractedKeySize];
                var vecA         = _hex.DecodeData(a);
                var b            = ((JObject)token).GetValue("b").ToString();
                var vecB         = _hex.DecodeData(b);
                AEZ.Extract(vecA, extractedKey);
                Assert.Equal(_hex.EncodeData(vecB), _hex.EncodeData(extractedKey));
            }
        }
示例#4
0
 public override string ToString()
 {
     return(Encoder.EncodeData(ToBytes().Reverse().ToArray()));
 }
示例#5
0
 public override string GetString(byte[] d)
 {
     return(_encoder.EncodeData(d));
 }
示例#6
0
        static void Main(string[] args)
        {
            Channel channel = new Channel("ac.testnet.libra.org:8000", ChannelCredentials.Insecure);
            var     client  = new AdmissionControl.AdmissionControl.AdmissionControlClient(channel);

            HexEncoder hex = new HexEncoder();

            SharedSecret sharedSecret = SharedSecret.Import(Encoding.UTF8.GetBytes("newdummy"));
            HkdfSha512   kdf          = new HkdfSha512();
            var          key          = kdf.DeriveKey(sharedSecret, null, null, Ed25519.Ed25519);
            var          sender       = key.PublicKey.Export(KeyBlobFormat.RawPublicKey);

            UInt64 seqNum    = 11;
            string senderHex = hex.EncodeData(Sha3.Sha3256().ComputeHash(sender));

            uint   amount  = 10000000;
            string reciver = "4ba2555fd146e79e37fda7a2f30dc1b4f3d9228aa48b230dbab0a18d407f2f9b";

            RawTransactionLCS rawTr = new RawTransactionLCS()
            {
                ExpirationTime = (ulong)DateTimeOffset.UtcNow.AddSeconds(60)
                                 .ToUnixTimeSeconds(),
                GasUnitPrice   = 0,
                MaxGasAmount   = 100000,
                SequenceNumber = seqNum
            };

            rawTr.TransactionPayload = new TransactionPayloadLCS();

            rawTr.TransactionPayload.PayloadType = (uint)TransactionPayloadLCSEnum.Script;
            rawTr.TransactionPayload.Script      = new ScriptLCS()
            {
                Code = Utilities.PtPTrxBytecode,
                TransactionArguments = new List <TransactionArgumentLCS>()
                {
                    new TransactionArgumentLCS()
                    {
                        ArgType = (uint)TransactionArgumentLCSEnum.Address,
                        Address = new AddressLCS(reciver)
                    },
                    new TransactionArgumentLCS()
                    {
                        ArgType = (uint)TransactionArgumentLCSEnum.U64,
                        U64     = amount
                    }
                }
            };

            rawTr.Sender = new AddressLCS(senderHex);

            var bytesTrx = LCSCore.LCSSerialization(rawTr);

            Types.SignedTransaction signedTx = new Types.SignedTransaction();
            var bytesTrxHash = Google.Protobuf.ByteString.CopyFrom(bytesTrx);

            var         seed      = Encoding.ASCII.GetBytes(RAWTX_HASH_SALT + LIBRA_HASH_SUFFIX);
            var         seedHash  = Sha3.Sha3256().ComputeHash(seed);
            List <byte> hashInput = new List <byte>();

            hashInput.AddRange(seedHash);
            hashInput.AddRange(bytesTrxHash);
            var hash = Sha3.Sha3256().ComputeHash(hashInput.ToArray());

            SubmitTransactionRequest req = new SubmitTransactionRequest();

            req.SignedTxn = new SignedTransaction();

            List <byte> retArr = new List <byte>();

            retArr = retArr.Concat(bytesTrx).ToList();

            retArr = retArr.Concat(
                LCSCore.LCSSerialization(key.Export(KeyBlobFormat.RawPublicKey))).ToList();
            var sig = SignatureAlgorithm.Ed25519.Sign(key, hash);

            retArr = retArr.Concat(LCSCore.LCSSerialization(sig)).ToList();
            req.SignedTxn.SignedTxn = ByteString.CopyFrom(retArr.ToArray());


            var result = client.SubmitTransaction(
                req, new Metadata());

            Task.Delay(5000).Wait();
            GetTransaction(client, senderHex, seqNum);
        }
 public async Task EncryptSeedAndSaveToFile(byte[] seed, string pin)
 {
     var password      = new uint256(Hashes.SHA256(Encoding.UTF8.GetBytes(pin).Concat(_hex.DecodeData(HashSalt)).ToArray()));
     var encryptedSeed = DotNetLightning.Crypto.CryptoUtils.impl.encryptWithAD(0UL, password, ReadOnlySpan <byte> .Empty, seed);
     await File.WriteAllTextAsync(_config.Value.SeedFilePath, _hex.EncodeData(encryptedSeed));
 }