Skip to content

Instantly share code, notes, and snippets.

@zbroyar
zbroyar / monad.ml
Created November 9, 2010 16:00
Монада невдалого обчислення.
(* Повертає монаду *)
let return x = Some x ;;
(* Перевіряє монаду на наявність значення та повертає результат
застосування функції до цього значення, інакше повертає *)
let (>>=) m f =
match m with
| None -> None
| Some x -> f x ;;
@zbroyar
zbroyar / gist:756823
Created December 28, 2010 02:33
Converter of PEM RSA private key to OCaml Cryptokit
#!/usr/bin/env ocaml
(*
Prerequisites: Findlib, Pcre, Cryptokit
Usage: openssl rsa -in privkey.pem -text | ./pem2ck.ml > privkey.cryptokit
*)
#use "topfind" ;;
#require "pcre" ;;
#require "cryptokit" ;;
@zbroyar
zbroyar / strrev.ml
Created March 8, 2011 21:08
Reverse of string
let strrev s =
let len = String.length s in
for i = 0 to ((len/2) - 1) do
let t = s.[i] in
s.[i] <- s.[len - i - 1];
s.[len - i - 1] <- t
done;
s
;;
@zbroyar
zbroyar / pkcs1v2pad.ml
Created March 8, 2011 21:04
PKCS#1 ver 2 padding
let pkcs1v2pad key msg =
let blen = key.RSA.size/8
and mlen = String.length msg
and zero = char_of_int 0
and rnd = Random.string Random.secure_rng in
let padlen = blen - mlen in
if padlen > 3 then begin
let res = rnd padlen in
res.[0] <- (char_of_int 0);
res.[1] <- (char_of_int 2);
@zbroyar
zbroyar / pkcs1v1pad.ml
Created March 8, 2011 21:02
PKCS#1 ver 1 padding
let pkcs1v1pad key msg =
let blen = key.RSA.size/8
and mlen = String.length msg in
let padlen = blen - mlen in
if padlen > 3 then begin
let res = String.make padlen (char_of_int 255) in
res.[0] <- (char_of_int 0);
res.[1] <- (char_of_int 1);
res.[padlen - 1] <- (char_of_int 0);
res ^ msg
@zbroyar
zbroyar / gist:1549036
Created January 2, 2012 02:25
Folding list of ADT items into pair of options
open Printf
type t = A of string * float | B of int * float
let l = [A ("a1", 0.); B (1, 1.); A ("a2", 1.1); A ("a3",1.2); B (2,1.1)]
let f = fun l ->
List.fold_left
(fun (a,b) it ->
match it,a,b with
@zbroyar
zbroyar / github_update.sh
Created September 23, 2012 13:16
Automatic code deployment via github email service hook
#!/usr/local/bin/zsh
# Need flock
zmodload zsh/system
lfn=/tmp/.github
git=/usr/local/bin/git
prefix=/path/to/clones
secret=your_secret
user=mailnull
@zbroyar
zbroyar / scan.ml
Last active December 24, 2015 00:59
Пошук та модифікація значень у адресному просторі процесів OS X.В оригіналі призначено для хаку ресурсів у грі "XCOM: Enemy Unknown".
(* ocamlfind ocamlopt -o scan -package unix,pcre scan.ml -linkpkg
Якщо знайти адресу кількості трупів сектоїдів, то забити склад
ніштяками можна, наприклад, так:
let addr = $sectoids
and pid = <XCOM pid>
and ch = open_out "cmd.gdb" in
for i = 0 to 35 do
Printf.fprintf ch "set {int}(0x%X + 4*%d) = 99999\n" addr i
@zbroyar
zbroyar / ocr.cc
Last active December 29, 2015 04:19
Simple OCaml wrapper for tesseract-ocr
#include <string>
#include <iostream>
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
extern "C" {
#include <caml/mlvalues.h>
#include <caml/memory.h>
#include <caml/alloc.h>
#include <caml/fail.h>
open ZMQ
open ZMQ.Socket
let context = init ()
let _ = print_endline "Connecting to hello world server..."
let requester = Socket.create context req
let _ = connect requester "tcp://localhost:5555"
let _ =
for i = 1 to 10 do