Skip to content

Instantly share code, notes, and snippets.

@Lohann
Lohann / Cargo.toml
Last active November 5, 2024 22:20
WebAssembly Base Project
[package]
name = "rust-wasm-minimal"
version = "0.1.0"
edition = "2021"
[lib]
name = "rust_wasm_minimal"
crate-type = ["cdylib"]
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
[package]
name = "cfg-demo"
version = "0.1.0"
edition = "2021"
[dependencies]
# Essa biblioteca só sera incluída no código se a feature `feature_a` for habilitada.
rand = { version = "0.8.5", optional = true }
[features]
[package]
name = "wasm-executor"
version = "0.1.0"
edition = "2021"
[dependencies]
anyhow = "1.0.91"
wasmtime = { version = "26.0.0", default-features = false, features = ["cache", "cranelift", "wat", "parallel-compilation", "pooling-allocator"] }
// -- package.json --
// "dependencies": {
// "wabt": "^1.0.36"
// }
/**
* The WAT code (WebAssembly Text Format) which must be compiled to WASM (binary).
* - Library used to compile: https://github.com/WebAssembly/wabt
* - WebAssembly instructions set: https://webassembly.github.io/spec/core/text/instructions.html
*/
// -- Cargo.toml --
// [dependencies]
// rand = { version = "0.8.5" }
// const-hex = { version = "1.13.1" }
use rand::prelude::*;
// Tamanho do secret e do vetor de inicialização.
const BLOCK_SIZE: usize = 16;
#[allow(clippy::manual_memcpy)]
@Lohann
Lohann / diffie_hellman.rs
Last active October 17, 2024 22:33
Algoritmo Repeating Squaring
const fn modpow(g: u32, exp: u128, n: u32) -> u32 {
let mut exponente = exp;
let mut resultado = 1;
let mut double = g;
while exponente > 0 {
if exponente % 2 == 1 {
resultado *= double;
resultado %= n;
}
exponente /= 2;
@Lohann
Lohann / float_utils.rs
Last active August 15, 2024 23:00
Example on how to convert, parse and display custom float types.
// Author: Lohann Paterno Coutinho Ferreira
//
use num_bigint::BigUint; // ^0.4.6
use num_traits::{One, Zero}; // ^0.2.19
use num_integer::Integer; // ^0.1.46
#[allow(clippy::unwrap_used, clippy::cast_possible_truncation)]
fn main() {
/// Decimal precision used when printing float and rational values.
const PRECISION: u32 = 32;
@Lohann
Lohann / EvmInterpreter.opcode
Last active September 30, 2024 11:55
Efficient EVM code interpreter written in EVM assembly
// EVM Interpreter Written in pure EVM assembly
//
// The bytecode is provided in the calldata, the code is interpreted, not deployed as a smart-contract.
//
// Motivation: Deploying a smart-contract is expensive, what if you just want to execute a tiny piece of
// custom logic, but without having to deploy a smart-contract? Then you can use this interpreter with delegatecall.
// Tested on https://www.evm.codes/playground
//
// @author Lohann Paterno Coutinho Ferreira
JUMPDEST // STOP 0x00
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
/**
* Workaround example on how to inject and execute arbitrary bytecode in solidity contract
* Currently only YUL supports verbatim: https://github.com/ethereum/solidity/issues/12067
* But you cannot import Solidity code in YUL, or YUL code in solidity, so this workaround is necessary.
* It works as long the byte sequence `0x7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F00` appear in the runtime code.
*
// Gas efficient SQRT method, computes floor(sqrt(x)).
// Constant gas cost of 355
//
// For testing use this tool: https://www.evm.codes/playground?fork=cancun
// Author: Lohann Ferreira
PUSH0
CALLDATALOAD
PUSH1 1
DUP2