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 / 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 / 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 / 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 / sign_message.ml
Created March 8, 2011 21:11
Sign a message with OCaml Cryptokit sha256 & RSA
let (>>) x f = f x ;;
let hash = hash_string (Hash.sha256()) ;;
let sign_of_message key msg =
msg >> hash >>
(pkcs1v1pad key) >>
(RSA.sign key) >>
strrev
;;
@zbroyar
zbroyar / gist:1432555
Created December 5, 2011 06:28
OCaml CURL GET, POST, PUT, DELETE examples
(* ocamlfind ocamlopt -o exmpl -package curl -linkpkg exmpl.ml *)
open Printf
let _ = Curl.global_init Curl.CURLINIT_GLOBALALL
(*
*************************************************************************
** Aux. functions
*************************************************************************
*)
@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