Skip to content

Instantly share code, notes, and snippets.

View shadeglare's full-sized avatar
👨‍💻
Pressing keys

Max Koverdyaev shadeglare

👨‍💻
Pressing keys
View GitHub Profile
@shadeglare
shadeglare / ledger.ts
Last active November 21, 2023 16:43
Server-side Solana transaction signing via Ledger
import { Connection, PublicKey, Transaction } from "@solana/web3.js";
import { getAssociatedTokenAddress, createAssociatedTokenAccountInstruction } from "@solana/spl-token";
import Solana from "@ledgerhq/hw-app-solana";
import TransportNodeHid from "@ledgerhq/hw-transport-node-hid";
(async () => {
// Check your derivative address path via the ledger live app.
const bip32path = "44'/501'";
@shadeglare
shadeglare / shl_bench.rs
Created April 6, 2023 15:08
Benchmark for plain shift op vs arm optimised one
fn shl_plain(v: [u32; 4], o: i32) -> [u32; 4] {
[v[0] << o, v[1] << o, v[2] << o, v[3] << o]
}
#[cfg(target_arch = "aarch64")]
fn shl_neon(v: [u32; 4], o: i32) -> [u32; 4] {
use std::arch::aarch64::{vld1q_s32, vld1q_u32, vqshlq_u32, vst1q_u32};
unsafe {
let v = vld1q_u32(v.as_ptr());
@shadeglare
shadeglare / sha256.rs
Created April 6, 2023 08:15
Unrolled sha256 implementation
pub fn sha256(data: &[u8]) -> [u8; 32] {
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
macro_rules! ch {
($x:expr, $y:expr, $z:expr) => {
($x & $y) ^ ((!$x) & $z)
};
}
use std::ops::Deref;
pub trait FloatBitOps {
type UBits;
type SBits;
fn sign_bit_left(self) -> Self::UBits;
fn exponent_bits_left(self) -> Self::UBits;
fn mantissa_bits_left(self) -> Self::UBits;
@shadeglare
shadeglare / caesar_cipher.rs
Created April 2, 2023 08:44
Simple caesar encoding in Rust
pub fn encode<'a, I>(data: I, key: u8) -> Vec<u8>
where
I: IntoIterator<Item = &'a u8>,
{
data.into_iter()
.map(|&b| b.wrapping_add(key))
.collect::<Vec<_>>()
}
pub fn decode<'a, I>(data: I, key: u8) -> Vec<u8>
pub trait DwordOps<TOutput> {
fn low_dword(self) -> TOutput;
fn high_dword(self) -> TOutput;
}
impl DwordOps<u64> for u64 {
#[inline(always)]
fn low_dword(self) -> u64 {
self & 0x0000_0000_ffff_ffff_u64
}
@shadeglare
shadeglare / primes_01.rs
Last active April 1, 2023 15:34
Different approaches to generate prime numbers
pub fn generate(count: usize) -> Vec<u32> {
assert!(count > 0);
let mut probe = 1;
let mut primes = {
let mut vec = Vec::with_capacity(count);
vec.push(2u32);
vec
};
pub trait BitSelect {
fn bitselect(self, right: Self, filter: Self) -> Self;
}
macro_rules! impl_bitselect {
($first:ty, $($rest:ty),+) => {
impl_bitselect!($first);
impl_bitselect!($($rest),+);
};
($ty:ty) => {
type Uuid = string;
@shadeglare
shadeglare / ApproachOne.cs
Last active February 21, 2021 14:12
Discriminating Unions
using System;
using System.Text.Json;
var inProgress = StatusFactory.InProgress();
var complete = StatusFactory.Complete("Expected data");
var failure = StatusFactory.Failure(404);
var options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase