import "./binary/not.code" as NOT import "./binary/and.code" as AND import "./binary/or.code" as OR import "./binary/xor.code" as XOR import "./binary/fulladd.code" as FULLADD import "./bitwise/32/not.code" as NOT import "./utils/32/ar6xar11xar25.code" as AR6XAR11XAR25 import "./utils/32/ar2xar13xar22.code" as AR2XAR13XAR22 import "./utils/32/ar7xar18xars3.code" as AR7XAR18XAR3 import "./utils/32/ar17xar19xars10.code" as AR17XAR19XAR10 import "./utils/32/add.code" as ADD import "./bitwise/32/xor.code" as XOR import "./bitwise/32/andxornotand.code" as ANDXORNOTAND import "./bitwise/32/andxorandxorand.code" as ANDXORANDXORAND import "./bitwise/32/copy.code" as COPY import "./utils/32/extend.code" as EXTEND def ANDtest() -> (field): 1 == AND(1, 1) 0 == AND(1, 0) 0 == AND(0, 1) 0 == AND(0, 0) return 1 def ORtest() -> (field): 1 == OR(1, 0) 1 == OR(0, 1) 0 == OR(0, 0) 1 == OR(1, 1) return 1 def XORtest() -> (field): 1 == XOR(1, 0) 0 == XOR(0, 0) 1 == XOR(0, 1) 0 == XOR(1, 1) return 1 def NOTtest() -> (field): b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = NOT(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) b18 == 1 b17 == 1 b16 == 1 b15 == 1 b14 == 1 b13 == 1 return 1 def FULLADDtest() -> (field): a, b = FULLADD(0,0,0) a == 0 b == 0 a, b = FULLADD(0,0,1) a == 1 b == 0 a, b = FULLADD(0,1,0) a == 1 b == 0 a, b = FULLADD(0,1,1) a == 0 b == 1 a, b = FULLADD(1,0,0) a == 1 b == 0 a, b = FULLADD(1,0,1) a == 0 b == 1 a, b = FULLADD(1,1,0) a == 0 b == 1 a, b = FULLADD(1,1,1) a == 1 b == 1 return 1 def AR6XORAR11XORAR25test() -> (field): b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = AR6XAR11XAR25(0,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1) b31 == 1 b30 == 1 b29 == 0 b28 == 1 b27 == 0 b26 == 0 b25 == 1 b24 == 1 b23 == 1 b22 == 1 b21 == 1 b20 == 0 b19 == 1 b18 == 0 b17 == 1 b16 == 0 b15 == 1 b14 == 1 b13 == 1 b12 == 0 b11 == 0 b10 == 1 b9 == 0 b8 == 0 b7 == 1 b6 == 1 b5 == 1 b4 == 0 b3 == 0 b2 == 1 b1 == 1 b0 == 1 return 1 def AR2XORAR13XORAR22test() -> (field): b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = AR2XAR13XAR22(0,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1) b31 == 0 b30 == 0 b29 == 0 b28 == 1 b27 == 1 b26 == 1 b25 == 1 b24 == 0 b23 == 1 b22 == 1 b21 == 1 b20 == 1 b19 == 0 b18 == 1 b17 == 1 b16 == 0 b15 == 1 b14 == 0 b13 == 0 b12 == 1 b11 == 1 b10 == 1 b9 == 1 b8 == 1 b7 == 0 b6 == 1 b5 == 1 b4 == 1 b3 == 1 b2 == 0 b1 == 1 b0 == 1 return 1 def AR7XORAR18XORAR3test() -> (field): // s0 of last digest message of empty message b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = AR7XAR18XAR3(1,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,1,1,1,0,0,1,1,0,0,1,0,1) b31 == 0 b30 == 1 b29 == 1 b28 == 0 b27 == 0 b26 == 0 b25 == 1 b24 == 1 b23 == 1 b22 == 1 b21 == 1 b20 == 1 b19 == 1 b18 == 0 b17 == 1 b16 == 1 b15 == 0 b14 == 1 b13 == 0 b12 == 1 b11 == 0 b10 == 0 b9 == 1 b8 == 1 b7 == 1 b6 == 1 b5 == 1 b4 == 0 b3 == 1 b2 == 1 b1 == 1 b0 == 1 return 1 def AR17XORAR19XORAR10test() -> (field): b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = AR17XAR19XAR10(1,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0) b31 == 0 b30 == 1 b29 == 0 b28 == 1 b27 == 0 b26 == 1 b25 == 1 b24 == 0 b23 == 0 b22 == 1 b21 == 0 b20 == 0 b19 == 0 b18 == 1 b17 == 0 b16 == 1 b15 == 1 b14 == 1 b13 == 1 b12 == 1 b11 == 1 b10 == 0 b9 == 0 b8 == 1 b7 == 0 b6 == 1 b5 == 0 b4 == 1 b3 == 1 b2 == 1 b1 == 0 b0 == 0 return 1 // 00000101000010001001010101000010 -> 01011000000010000000000000000000 DOESN'T PASS // 00100010000000000000100000000000 -> 00000101000010001001010101000010 PASSES def AR17XORAR19XORAR10testnull() -> (field): b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = AR17XAR19XAR10(0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,1,0,1,0,1,0,0,0,0,1,0) b31 == 0 b30 == 1 b29 == 0 b28 == 1 b27 == 1 b26 == 0 b25 == 0 b24 == 0 b23 == 0 b22 == 0 b21 == 0 b20 == 0 b19 == 1 b18 == 0 b17 == 0 b16 == 0 b15 == 0 b14 == 0 b13 == 0 b12 == 0 b11 == 0 b10 == 0 b9 == 0 b8 == 0 b7 == 0 b6 == 0 b5 == 0 b4 == 0 b3 == 0 b2 == 0 b1 == 0 b0 == 0 return 1 def ADDtest() -> (field): b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = ADD(0,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1) b31 == 1 b30 == 0 b29 == 1 b28 == 0 b27 == 1 b26 == 0 b25 == 0 b24 == 0 b23 == 1 b22 == 0 b21 == 1 b20 == 0 b19 == 1 b18 == 1 b17 == 0 b16 == 0 b15 == 0 b14 == 1 b13 == 0 b12 == 0 b11 == 0 b10 == 1 b9 == 0 b8 == 0 b7 == 1 b6 == 1 b5 == 0 b4 == 1 b3 == 1 b2 == 0 b1 == 1 b0 == 0 return 1 def COPYtest() -> (field): b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = COPY(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0) b18 == 0 b17 == 0 b16 == 1 b15 == 0 b14 == 0 b13 == 1 return 1 def ANDXORANDXORANDtest() -> (field): b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = ANDXORANDXORAND(0,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1) b31 == 0 b30 == 1 b29 == 0 b28 == 1 b27 == 0 b26 == 1 b25 == 0 b24 == 0 b23 == 0 b22 == 1 b21 == 0 b20 == 1 b19 == 0 b18 == 1 b17 == 1 b16 == 0 b15 == 0 b14 == 0 b13 == 1 b12 == 0 b11 == 0 b10 == 0 b9 == 1 b8 == 0 b7 == 0 b6 == 1 b5 == 1 b4 == 0 b3 == 1 b2 == 1 b1 == 0 b0 == 1 return 1 def ANDXORNOTANDtest() -> (field): b31, b30, b29, b28, b27, b26, b25, b24, b23, b22, b21, b20, b19, b18, b17, b16, b15, b14, b13, b12, b11, b10, b9, b8, b7, b6, b5, b4, b3, b2, b1, b0 = ANDXORNOTAND(0,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,1,0,0,0,1,0,0,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,1) b31 == 0 b30 == 1 b29 == 1 b28 == 1 b27 == 0 b26 == 1 b25 == 0 b24 == 1 b23 == 1 b22 == 1 b21 == 0 b20 == 1 b19 == 0 b18 == 1 b17 == 1 b16 == 1 b15 == 1 b14 == 1 b13 == 1 b12 == 0 b11 == 1 b10 == 1 b9 == 1 b8 == 1 b7 == 1 b6 == 1 b5 == 1 b4 == 1 b3 == 1 b2 == 1 b1 == 0 b0 == 1 return 1 def EXTENDtest() -> (field): wfb31, wfb30, wfb29, wfb28, wfb27, wfb26, wfb25, wfb24, wfb23, wfb22, wfb21, wfb20, wfb19, wfb18, wfb17, wfb16, wfb15, wfb14, wfb13, wfb12, wfb11, wfb10, wfb9, wfb8, wfb7, wfb6, wfb5, wfb4, wfb3, wfb2, wfb1, wfb0 = EXTEND(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) wfb31 == 1 wfb30 == 0 wfb29 == 0 wfb28 == 0 wfb27 == 0 wfb26 == 0 wfb25 == 0 wfb24 == 0 wfb23 == 0 wfb22 == 0 wfb21 == 0 wfb20 == 0 wfb19 == 0 wfb18 == 0 wfb17 == 0 wfb16 == 0 wfb15 == 0 wfb14 == 0 wfb13 == 0 wfb12 == 0 wfb11 == 0 wfb10 == 0 wfb9 == 0 wfb8 == 0 wfb7 == 0 wfb6 == 0 wfb5 == 0 wfb4 == 0 wfb3 == 0 wfb2 == 0 wfb1 == 0 wfb0 == 0 return 1 def main() -> (field): field a = ANDtest() field b = ORtest() field c = XORtest() field d = NOTtest() field e = FULLADDtest() field h = AR6XORAR11XORAR25test() field i = AR2XORAR13XORAR22test() field j = AR7XORAR18XORAR3test() field k = AR17XORAR19XORAR10testnull() field l = ADDtest() field m = COPYtest() field n = ANDXORANDXORANDtest() field o = ANDXORNOTANDtest() field p = EXTENDtest() return 1