package org.thoughtcrime.SMP.SMP; import android.util.Base64; import org.thoughtcrime.SMP.TextSecureTestCase; import org.thoughtcrime.SMP.crypto.SMP.SMP; import org.thoughtcrime.SMP.crypto.SMP.SMPState; /** * Created by ludwig on 20/08/15. */ public class SMPTest extends TextSecureTestCase { final SMP smp = new SMP(); private SMPState aState = new SMPState(); private SMPState bState = new SMPState(); String secretString = "secret"; private byte[] secret = secretString.getBytes(); int question = 123; byte[] step1Actual; byte[] step2Actual; byte[] step3Actual; byte[] step4Actual; String step1StringExpected = " AAAABgAAAMDnGRFuM6FbLQLSOqoG4k6ESIuQupw/AOQPQKh84qHba4bP9mHfjdEyjCWo4tBlHg2b\n" + " C5Mt5jgkYemE2LAJK85of6bV3YUFuxrVufCuTUzBymKIlsPEUpctHPr7sXwml01yrBHFKI/MdMQB\n" + " l8IDGQ3EAl9du4CPCRlmHHv2f5Ljdihu/KxG1iYVtZsXSNiwWITD3Cc+IFk8IqDMOPZY4uj4Lkr7\n" + " KrzMWydLTt3wY7iniZ4SKpcELDWTgpeTy87J/ZQAAAAgQKOMj3YoNLlkjwQRBijvWNmN9hXpkrvi\n" + " eNU7VfMd/20AAADATAJ7xESTOsgfY7aiYpbHiKxRPv+m6GWnwQZJi8SIiaQff0TIGMx4ffKjnm2b\n" + " pT6KAN7CqAv2hqqMxs9edEM3TAYvZqHwReFc+NEg1PxNUOum96AT7C3ORDpxF4GEju6Rt8ht0SFs\n" + " mY+OkDIo+QU6eR/nLpCC83KZOiwnfxBP2B953hPWW+meov8GiUXxgbMch1nzCsCUGzqhAtXHGpBM\n" + " exJfgoU+F6711sTK3I4AD32wmYR9zgWkmxO47JUHZ3x8AAAAwNXeufH1ouOTpHX6X2KOLw5EsWMg\n" + " 7jocAFtr1mbJyBwuqhHyrxgtFaTQIt4hsQzkpX5AjEIXrcIt+P/+4YyJoF+Dh7pEGfqn+N3SGyk+\n" + " 2gttiTyuY1pl6lRUjJlyZcmoHJy5OpGkQYoLKUqgnVmnLwHZjCgjBH1f01UnWUjJTTazcpwCw1Lx\n" + " od4x7QICQqVmiJnaGaCaYsrSkYtGoMTILJ3dk2FZLqseOj+ElV210XtVghlVAyxROK3kDP1pKNng\n" + " HgAAACDlnu3oERXQwQuIrxdq2L7DoW9lImgQC7AKwAn2qHtT3QAAAMALuCjPKkePx165hiZFX4Tc\n" + " BWdKH3jUbt5IJt1Uvgnld9n8l1muEXTbTXhn7DnxFHX9f7LcgUlGkt2i+/9bDERDgpd/5ZDZ71Hi\n" + " RS4ug3OepafHcIDCunnAo9AgoA6w9zTNBPQWmyYbVxW4pMrV1O9/5s1Pz/do6v5kyIyAq6H8Md+G\n" + " vyje1k5H937DJtbIK6OQhMWPpGXcygINjdZBk7sE5MetXSnddYuelOx4AE58uxXYitw6dWCSpIQQ\n" + " iDeXDB4="; String step2StringExpected = " AAAACwAAAMDE9PQJJoXpsqBO6iFZDWCx1O7TEaZhfVXTn/e4cXOBF22V8Iy3k1OkVy4gvgFayWjD\n" + " SPG8jdW3+ZwRPLfjMKmS9q8ShumdM6/70gPs1h9VT6/noRfmL0VzP4P+QhdHsDAkVZLgYqr3AOps\n" + " 7hjCg/8ysHr6nEpOfoafXWQqbAjFX3Dg/m1k32Nysn3QEmSqtXpIqeVk9cZAQTa5PG2Rko80f432\n" + " v+6sqxoiKjfoeJBrkStiGcH1cZdVaWjIi315H74AAAAgHly7yGJbIqqRr/brzEjNl38k0JLIRvFc\n" + " XQ/o4FP33O4AAADATaLd1ofmSnMQACJdFV2KmrwFEwzdDPplq5jkKUviBlA6W1qSAEUMYpoYQWJp\n" + " 1Wd94hAOUtF/489ZqdfVj8Qy9HAw32Urh2In1qoojNzm61D+dOt/UTl/Tlrb5oIIQD1GXt5kc64o\n" + " MPtpkijf5Eu/+JXLugzbAr1nIfAK47mx8Bfkv4tcsjz0i7ZOKqggkIb75StRpJxVOV+1D4KSMaeH\n" + " 65RnZ55w6aOoydGZgqqse00d8vS3KHJbk9B3qTj26rr6AAAAwH644SoDlTe7m04grSCKt1iBFrNT\n" + " fMP9mMhMtsmEiE5umyCRK54enyEMwxuL1V4uWi5RxybYXldcSe/kj+xanLq9hv1s9XZjPpFr3z99\n" + " umo13NIRDVjdSlaBrXgySWS2oNSMOetTLBssx9ZFy/gCPwAcxXfgiUhnayC9CYnO8hoWZWxlmDlv\n" + " eEUAQXapojlqkzawCeHp67Vxr10ckrE+iX46/tX21+oyEiNq9WTkEXmPAdiYs42N+bcUNQgowo+y\n" + " 2gAAACDTgBZs+F3IZ+1aOAZ/9LogK92/RcFGTCyFuUJeyz+djwAAAMBWw9rgVgQPsDZ6IwD1FZeo\n" + " GT+cv8pZbyoIT5ialIwkM54R0p9EIU7vTUZWL7a6Tz6gitNp90ZWaziLCMTYs8V3nr70iYAIyWmN\n" + " 6E3ipFX/lgZH2mnSzQL1IfD/ZY0NiuolMnxOmMR713/YobyCi78WMbeqyByaJrbXlp3Brp6oCFxN\n" + " CyFMQdOI11cczTTykWFzbAImcTZuJgxgook7i2neYUsqx8QrpxlEpOP91thkGDXuNeEdxak9NqUK\n" + " YMTixjYAAADAa2AqCoSK8Yvr8g+j63uS+e4D7XlBw6IbuwhCuZKXL4hb2FAXkiFHsvr+hlcwnAMQ\n" + " +x4lK2UzhL+AkEdA9egVBfQoMDH6TxPEznD4aRthjBzhXTrw1N3F3Ha8KNugzZ9DwvGVN7RVdrsG\n" + " OjR+CUy6e1pSS97jcAk+1b6eTBQXUToTSn9muzMBHWYx8P0bR8BzRxhqQdjisZs9iip6c1Qs04uf\n" + " X6SlfxKqsdlOBvPuL5HwCKdvAmeQjtjhBCnlqd9SAAAAwC8NdCaWacoYPiKATAlPONDEzRvNvMHx\n" + " v+yswOs3ouV7vDQXZH4ztoIL1slw6fgDDa7V6QdSd+XVn7ORFWO4ZEAfixEtcdTeg774T0ctVzym\n" + " jYd136G+RLS/xPT3/Rx4tqunEyfa+uWe8ZTAuyuUOkwY67L5mkKI6vQSTg7Jnbo5rw9WWlo3r9Ho\n" + " rNEObFEe3kul50TWPVHZbOuJeypbRo74z+K2XqU4ht1eecHXWo96n89D2IGU9z+K/7PZIwrebwAA\n" + " ACCcQcWA5M/c9NrLCmW59hSYQ8bxV8RO2O6Ce6YuVZMPZwAAAMBAz2XUCcyF28LaXvkLoOG/liiI\n" + " LyWhJlL4Kt/OFo2+qsZdQ3L6XKSRrAuNw0OGj0xs0BeVkddNDd1Up4/unZuMLuXUDe/K+A2SDuGs\n" + " csZZOQZoy+LnOnn689XNTUTbRU687vpIF+XG0CIHWGwwxg2hkXLCDoD5fZrVMNVweaIkxg6XLevE\n" + " HNlBIe0PxAZ+p68VHbq6Uq5R8UeLbR/SXFTzRt7jVfgL5nPt9xGPFE5NtoQjid1fiT+w+GTad8Ha\n" + " /LAAAADAJjrUdqd34TufoYpmwTGw+5jW/l2j4NIzJK6rrwjc7Vp7AHx4my5ovugTQGqIOUvMVajK\n" + " WBMC+ruXDUjc+E5OPB5PqtUCiUzU8JAscapYdm+xRibYmIIILU98wwH1YO5L8d+1vl1if8ZWuDp4\n" + " ATAbgxDJT6/vZk/ngOWum6Y3gexsLf9FB8LLrsRqvA1d1pb3HfFo33dud3YUcAdXVN4zVDIh9ryk\n" + " 7lEulwSiQwqv/bSpmHPlqKB1dNtqI4NTBCBd"; String step3StringExpected = " AAAACAAAAMBX3UbTCHtzS9SP3Re9pppCMF5sSsBUiQTQfr+MurIwZEyYnQ1uB/YOBlRD9hPgROl2\n" + " Y3KwU7wX9I3olWs4lqF4cihL86toMwlB7Sy9BOJqArCh+9Lx6fOLObVhZRvvYsZBOCZWBfiPEkRc\n" + " nzNgBc17PDGRjdJqX5pkPKUweNjxljckyjwOIxGNzHFyJwt3ypHP+HO1kNSY5ItyWN06lYokEIhp\n" + " r3fv8C1QcARXZ5d2TjVUG1MewEQ6/2urUOWLx6MAAADA0vu1n2/l6981xydz/3+8IkXXK4dRuc9k\n" + " p4dswy7wXzDiWcDGTkGDkzeuY1aHEstnsTl1UHhTQUJi5S32iBLlqj+EuyIlm0iG5oLWmXjKTKfZ\n" + " SWDjL3G41KjpXDr7YKNIgW3y/4UxOxtuIrXGu38+rZu6LBiM09Gm36GJ8ocfRBqFrwgySXy1vXHS\n" + " OKOzVGBo1DZixIH0ujhArcg/CPvuPNJHMIvuRQqDwLrAHRrAQGXkTBpQA0qR55LBWMeiBR4HAAAA\n" + " IMIPrrc9kVT+1EGbBi7qmuAW5lJXoLd5S1F8EB5yi9GFAAAAwFP5TWNVG8Xn5YIXF+LzZMn1WO8B\n" + " x6tqa9wahD2hfTPv9z5Zg01HLxlP7MfhmaRLC94DY6onHBIDOa5HpU3FT5xsYeZYBHvF5e1DejwS\n" + " 86TU5NDnqlVJrP9WrMGEofLpSuo5y05uanwPFh7uv0wJYh34msUGiataevhckSrM2AhRFfnY7g5/\n" + " Mr6P2E0op2VQUCiYpMhcscktHkP70OR51tntrl7+2NhaarPAsft5QIKZCwr+A9ppwHbiVStq6G35\n" + " PwAAAMAWVVrS1TyJ2X+CZ4iAauOsbyLlZtdpOaVaCIikQoXsNy6rhwqeFR1sfTgk4wr+qaadXBlU\n" + " BcwFOlfCNITD9JO/IKvSdDIyt05v4ywjgVgeBo4Mdysd6zexsWkt9yIdqcPSy243jswlmXlBaOhL\n" + " 6Bs8hgpwaohZIV3RJXnqbl4FwlHx/LBIlcfLRetvpZEEdjlz/MRoTWg7qm6gib4+7GgGmYSN1SQ4\n" + " TBHLP01PugDvIXqDzgEyIwbHzRkyjEKYdD8AAADAv//DYRcLiT9BKIO5TRfOw2/ry+PAqHBpmO5J\n" + " R9GhrPAk3KEDnOAUveUzeKXSySXXaC+lM44OrCLe8QytZMQBPdDZ8e0TBta6+4DoDCVRK3r/Jlvw\n" + " E0iCTGdH47tNQicIxlNdFdmF/nCj405zaU0w7+XOWMqRa8KyEqBVDmr7GT74d7bIzfCf8wOpC3bj\n" + " Li5TkDUl890JItub4xjC2k8k4WDiAl4iI8ajZZfbLz8sZB81q6fR8gGze38zkpydz9vzAAAAIEkC\n" + " HfIbWFbwHPatELcOOBpdg8j8cRXe3y2DfxOsxWdNAAAAwCxBPlisAzFDdTnr8qF1ydPhk689ND8K\n" + " Y/tqFjocR2lzP+3JyKHpG5csJFc40Hn0/UyjW3jbXZXNEIlglogQk1r/pDwXcWfc2vJDWJHIZVSn\n" + " EmSMwWWMt614CutzuV4GviDtJcRwhLNuUop+arPP41Udz7ff0RjofToVBPvWQvdnsqXttHTOfjtx\n" + " Y1s8a+xvnVJXJ4ys3Pw2IAYz4lQAQsKzFaW240AhZNL3Tsfd9d91awmcPRcj3z3OHPgpdztg6A=="; byte[] step1Expected = decode(step1StringExpected); byte[] step2Expected = decode(step2StringExpected); byte[] step3Expected = decode(step3StringExpected); private void testStep1() throws Exception { step1Actual = SMP.step1(aState, secret); for(byte b : step1Actual) assertNotNull(b); assertEquals(step1Expected, step1Actual); } private void testStep2() throws Exception{ SMP.step2a(bState,step1Actual,question); step2Actual = SMP.step2b(bState, secret); for(byte b : step2Actual) assertNotNull(b); assertEquals(step2Expected, step2Actual); } private void testStep3() throws Exception{ step3Actual = SMP.step3(aState, step2Actual); for(byte b : step3Actual) assertNotNull(b); assertEquals(step3Expected, step3Actual); } private void testStep4() throws Exception{ step4Actual = SMP.step4(bState, step3Actual); assertEquals(1, bState.smProgState); } private void testStep5() throws Exception{ SMP.step5(aState, step4Actual); assertEquals(1, aState.smProgState); } private byte[] decode(String input) { return Base64.decode(input.getBytes(), 0); } }