# First Foray into MIPS Assembly

Task: Print Hello World 10 times.

Defining the combination formula (nCr) recursively.

This works because http://www.cs.nott.ac.uk/~vxc/g51mcs/ch05_combinatorics.pdf , page 9.

# How I understand RSA

Euler’s totient function is defined as the number of positive integers relatively prime to n (including 1). E.g. φ(12) = 4 ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), and φ(15) = 8. http://www.thescienceforum.com/mathematics/14111-modular-multiplicative-inverse-context-rsa.html https://en.wikibooks.org/wiki/Algorithm_Implementation/Mathematics/Extended_Euclidean_algorithm https://docs.google.com/viewer?url=www.math.utah.edu/~fguevara/ACCESS2013/Euclid.pdf as to why the extended Euclid’s algo can be used to find the modular multiplicative inverse https://docs.google.com/viewer?url=ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf https://docs.google.com/viewer?url=ftp://ftp.rsasecurity.com/pub/rsalabs/rsa_algorithm/rsa-oaep_spec.pdf In particular, ^ page 9. OAEP is the padding scheme ( http://crypto.stackexchange.com/questions/10145/rsa-pcks1-v2-1-rsaes-oaep-algorithm http://crypto.stackexchange.com/questions/2074/rsa-oaep-input-parameters ) , whereas I2OSP and OS2IP (on page 4); what really helped things come full circle for me is realizing how they represent arbitrary data as an integer (first converting it to an octet string). Without further do, let’s test our generated keys by encrypting and decrypting the number 521 (any number smaller than 527, our modulus, will do. ( http://stackoverflow.com/questions/10061626/message-length-restriction-in-rsa ) )

Note that if we try with a larger number…

Nope. What really helped things come full circle once again (or full sphere..) http://en.wikipedia.org/wiki/Pretty_Good_Privacy#Confidentiality http://superuser.com/questions/383732/how-does-ssh-encryption-work It makes more sense to use a symmetric encryption algorithm with high throughput to encrypt the data first, then use PKI to encrypt and transfer the key. And that is how the world works.

# Good First Bug

https://wiki.mozilla.org/Good_first_bug So!… I realize the change isn’t as trivial in FF 29+ since the switch to the nasty curved tabs. Regardless, here’s my solution: http://forums.mozillazine.org/viewtopic.php?f=38&t=2799203 and add the code to remove sidebars and this:

into browser.css

# Proof by contradiction (aka a LaTeX test)

What is a proof by contradiction? A proof by contradiction is if $\neg P \Rightarrow F$ is true.

One assumes that a proposition P is False, and uses that to derive until a contradiction is reached, which can’t be True.

A popular example: Let’s prove that $\sqrt2$ is irrational. An irrational number is something that cannot be expanded into a fraction. (A common misconception is that Pi is $\frac{22}{7}$ and therefore rational; no it is not exactly $\frac{22}{7}$.

Assume that $\sqrt2$ is rational; such that we can represent it as $\frac{a}{b}$, where $\frac{a}{b}$ is a fraction in lowest terms.

$\Rightarrow \sqrt2 = \frac{a}{b}$ $\Rightarrow 2 = \frac{a^2}{b^2}$ $\Rightarrow 2b^2 = a^2$ $\Rightarrow 2 \mid a$ $\Rightarrow 4 \mid a^2$ $\Rightarrow 4 \mid 2b^2$ $\Rightarrow 2 \mid b^2$ $\Rightarrow 2 \mid b$ If both $a$ and $b$ are even, they are not in lowest terms, as both can be divided by 2 for further simplification. Hence we have a contradiction. $\square$

# On calling su in an Android App

http://su.chainfire.eu/#how I noticed that https://github.com/koush/Superuser‘s su binary requires quotes around the target command, or else it won’t execute properly.

The “solution” is to write the intended su -c command to a shell script file and then call it with ProcessBuilder:

# My first foray into Brainfuck

Print damned.

Obfuscate it.

Now print “damned” in Brainfuck, and let’s play codegolf.

Challenge accepted.

http://www.iamcal.com/misc/bf_debug/ Debugger to help you visualize what’s going on. The first brainfuck works by incrementing the first cell to 10, then the loop increments the second cell to 100 and the 3rd cell to 110, and the <<- decrements the loop “counter”, which is held by the first cell.

At the end of the loop we should have [0][100][110]. Everything after the loop just increments or decrements to the appropriate ascii decimal value and outputs to stdout.

http://www.asciitable.com/ The second one works by first decrementing the value of the first cell, which is 0; hopefully the bf interpreter will wrap around to 255. Not all bf interpreters do this; https://apps.ubuntu.com/cat/applications/saucy/bf/ does but http://swapped.cc/#!/bff doesn’t.

Since the ascii decimal codes of the letters d, m, n, e, d are all in between 100 and 110 (a is 97), the shortest way I could think of was to have a big number to use as the loop counter and decrement it in intervals. 102 is 40% of 255, or 2/5ths, so after incrementing twice for cells 1, 2, and 3 go back to cell 0 and decrement by 5. At the end of the loop we should have [0][102][102][102].