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); }
public override string ToString() { var bytes = ToBytes(); Array.Reverse(bytes); return(Encoder.EncodeData(bytes)); }
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)); } }
public override string ToString() { return(Encoder.EncodeData(ToBytes().Reverse().ToArray())); }
public override string GetString(byte[] d) { return(_encoder.EncodeData(d)); }
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)); }