# 3. Funzioni

Le operazioni di cui sopra possono essere combinate per creare funzioni.

Le prime quattro funzioni sono nominate usando il simbolo greco Sigma (minuscolo σ e maiuscolo Σ). Questo non è per una ragione particolare, è solo per poter dare dei nomi ad alcune operazioni combinate.

# σ0 (sigma0.rb)


σ0(x) = ROTR^7(x) ^ ROTR^18(x) ^ SHR^3(x)

# σ1 (sigma1.rb)


σ1(x) = ROTR^17(x) ^ ROTR^19(x) ^ SHR^10(x)

# Σ0 (usigma0.rb)


Σ0(x) = ROTR^2(x) ^ ROTR^13(x) ^ ROTR^22(x)

# Σ1 (usigma1.rb)


Σ1(x) = ROTR^6(x) ^ ROTR^11(x) ^ ROTR^25(x)

Le ultime due funzioni di Choice e Majority accettano tre input diversi.

# Choice (ch.rb)

Questa funzione usa il bit x per scegliere tra i bit y e z. Sceglie il bit y se x=1, e sceglie il bit z se x=0.


Ch(x, y, z) = (x & y) ^ (~x & z)

# Majority (maj.rb)

Questa funzione restituisce la maggioranza dei tre bit.


Maj(x, y, z) = (x & y) ^ (x & z) ^ (y & z)