Skip to content
Snippets Groups Projects
  • Marek Vavruša's avatar
    contrib: created 'contrib' directory with ccan/isaac as csprng · dbca2316
    Marek Vavruša authored
    previously cryptolib random function was used to generate message id,
    this works well but it is slow especially when the entropy is low,
    replaced with cryptographically safe prng ISAAC
    
    the ccan directory is going to be used in the future, as it's include
    structure makes it easy to embed C snippets instead of reimplementing
    them
    dbca2316
run.c 7.11 KiB
#include <ccan/isaac/isaac.h>
#include <ccan/isaac/isaac.c>
#include <ccan/tap/tap.h>
#include <stddef.h>

static const uint32_t STATEVEC[ISAAC_SZ<<1]={
  0xF650E4C8, 0xE448E96D, 0x98DB2FB4, 0xF5FAD54F,
  0x433F1AFB, 0xEDEC154A, 0xD8370487, 0x46CA4F9A,
  0x5DE3743E, 0x88381097, 0xF1D444EB, 0x823CEDB6,
  0x6A83E1E0, 0x4A5F6355, 0xC7442433, 0x25890E2E,
  0x7452E319, 0x57161DF6, 0x38A824F3, 0x002ED713,
  0x29F55449, 0x51C08D83, 0xD78CB99E, 0xA0CC74F3,
  0x8F651659, 0xCBC8B7C2, 0xF5F71C69, 0x12AD6419,
  0xE5792E1B, 0x860536B8, 0x09B3CE98, 0xD45D6D81,
  0xF3B26129, 0x17E38F85, 0x29CF72CE, 0x349947B0,
  0xC998F9FF, 0xB5E13DAE, 0x32AE2A2B, 0xF7CF814C,
  0x8EBFA303, 0xCF22E064, 0x0B923200, 0xECA4D58A,
  0xEF53CEC4, 0xD0F7B37D, 0x9C411A2A, 0xFFDF8A80,
  0xB40E27BC, 0xB4D2F976, 0x44B89B08, 0xF37C71D5,
  0x1A70E7E9, 0x0BDB9C30, 0x60DC5207, 0xB3C3F24B,
  0xD7386806, 0x229749B5, 0x4E232CD0, 0x91DABC65,
  0xA70E1101, 0x8B87437E, 0x5781414F, 0xCDBC62E2,
  0x8107C9FF, 0x69D2E4AE, 0x3B18E752, 0xB143B688,
  0x6F4E0772, 0x95138769, 0x943C3C74, 0xAFC17A97,
  0x0FD43963, 0x6A529B0B, 0xD8C58A6A, 0xA8BCC22D,
  0x2DB35DFE, 0xA7A2F402, 0x6CB167DB, 0x538E1F4E,
  0x7275E277, 0x1D3B8E97, 0xECC5DC91, 0x15E3A5B9,
  0x03696614, 0x30AB93EC, 0xAC9FE69D, 0x7BC76811,
  0x60EDA8DA, 0x28833522, 0xD5295EBC, 0x5ADB60E7,
  0xF7E1CDD0, 0x97166D14, 0xB67EC13A, 0x210F3925,
  0x64AF0FEF, 0x0D028684, 0x3AEA3DEC, 0xB058BAFB,
  0xB8B0CCFC, 0xF2B5CC05, 0xE3A662D9, 0x814BC24C,
  0x2364A1AA, 0x37C0ED05, 0x2B36505C, 0x451E7EC8,
  0x5D2A542F, 0xE43D0FBB, 0x91C8D925, 0x60D4D5F8,
  0x12A0594B, 0x9E8A51DA, 0xCD49EBDB, 0x1B0DCDC1,
  0xCD57C7F7, 0xE6344451, 0x7DED386F, 0x2F36FA86,
  0xA6D12101, 0x33BC405D, 0xB388D96C, 0xDB6DBE96,
  0xFE29661C, 0x13EDC0CB, 0xCB0EEE4A, 0x70CC94AE,
  0xDE11ED34, 0x0606CF9F, 0x3A6CE389, 0x23D74F4E,
  0xA37F63FF, 0x917BDEC2, 0xD73F72D4, 0x0E7E0E67,
  0x3D77D9A2, 0x13ADD922, 0x8891B3DB, 0x01A9BD70,
  0x56A001E3, 0xD51F093D, 0xCC033CE3, 0x5AD0D3B0,
  0x34105A8C, 0x6A123F57, 0xBD2E5024, 0x7364944B,
  0xE89B1A3B, 0x21835C4D, 0x9F39E2D9, 0xD405DED8,
  0x294D37E5, 0xBCCAAEED, 0x35A124B5, 0x6708A2BC,
  0xB00960BA, 0x2A98121A, 0x4D8FAE82, 0x0BB3263F,
  0x12595A19, 0x6A107589, 0x0809E494, 0x21C171EC,
  0x884D6825, 0x14C8009B, 0xB0B84E7B, 0x03FB88F4,
  0x28E7CB78, 0x9388B13B, 0xDD2DC1D5, 0x848F520A,
  0x07C28CD1, 0x68A39358, 0x72C9137D, 0x127DD430,
  0xC613F157, 0x8C2F0D55, 0xF7D3F39F, 0x309BFB78,
  0x8406B137, 0x46C0A6F5, 0x3718D597, 0x08607F04,
  0x76904B6D, 0x04DB4E13, 0xCD7411A7, 0xB510CE0E,
  0xBFC7F7CC, 0xB83F957A, 0xFDFEF62D, 0xC35E4580,
  0x3FF1E524, 0x4112D96C, 0x02C9B944, 0xD5990DFB,
  0xE7E26581, 0x0D9C7E7E, 0x826DFA89, 0x66F1E0AB,
  0x30BCC764, 0xEADEBEAC, 0xED35E5EE, 0x0C571A7D,
  0xE4F3A26A, 0xF7F58F7B, 0xADF6BC23, 0x5D023E65,
  0x1ED3FF4E, 0xEC46B0B6, 0xD2A93B51, 0xE75B41C9,
  0x7E315AEB, 0x61119A5A, 0x53245B79, 0x33F6D7B1,
  0xCAE8DEBA, 0x50FC8194, 0xAFA92A6D, 0xC87C8006,
  0x4188BFCD, 0x8BACE62E, 0x78FFA568, 0x5597EC0F,
  0xB4415F7D, 0x08294766, 0xAD567643, 0x09C36F90,
  0x3DDE9F39, 0x4A0A283C, 0x18080C8E, 0x080C79EC,
  0x79AE4C10, 0xCB9E1563, 0x7CDD662F, 0x62D31911,
  0xA4CA0CF1, 0x5CF824CD, 0x3B708F99, 0x1E16614C,
  0xB6B9D766, 0x5DE87ABB, 0x7229EA81, 0xD5B2D750,
  0x56E6CD21, 0xFE1E42D5, 0x96DA2655, 0xC2B9AA36,
  0xB8F6FD4A, 0x6A158D10, 0x01913FD3, 0xAF7D1FB8,
  0x0B5E435F, 0x90C10757, 0x6554ABDA, 0x7A68710F,
  0x82AC484F, 0xD7E1C7BE, 0x95C85EAA, 0x94A302F4,
  0x4D3CFBDA, 0x786B2908, 0x1010B275, 0x82D53D12,
  0x21E2A51C, 0x3D1E9150, 0xB059261D, 0xD0638E1A,
  0x31860F05, 0x81F2864D, 0xFF4CFC35, 0x0451516D,
  0xBD086F26, 0xBC5654C1, 0x65DFA427, 0xA82427F5,
  0x582E3014, 0xB8D2486D, 0xC79A1749, 0x9A1D7745,
  0x8766BB54, 0x1E04A7F7, 0x3D3DFF8A, 0xD5EC6BF4,
  0xDBEF7D9F, 0x36EC0EA3, 0x1FEB2E4F, 0x15CFCC5C,
  0xD8C423FB, 0xD0EF3CC9, 0xEB244925, 0xBA5590C8,
  0xA5F48AC4, 0x33C5321C, 0x613B67B2, 0x479C3A22,
  0xE21339CC, 0x10D210AA, 0x931DD7E2, 0xEF05EE06,
  0xB82F2703, 0xA385CB2C, 0x5D67133C, 0x877EB7B4,
  0x1E3437F7, 0x5AFB43AE, 0x53C078F3, 0x94D90481,
  0x1D964589, 0x08063A85, 0xE1322228, 0x1956B1E5,
  0x31860F13, 0x2E7B022F, 0x21182CA3, 0x96F703AC,
  0x46819E2E, 0x0D28FE52, 0x3724D4DC, 0xA0EABE6B,
  0xC66699FD, 0xC6112FDD, 0x19C1E69C, 0x04D3658A,
  0x4B55DD99, 0x31907D62, 0xF854B522, 0x4D678F26,
  0x22AE0582, 0xEAFED133, 0xE4A51D21, 0x84BD6DD6,
  0xC1A51375, 0x3F28EE63, 0xFB737B1A, 0x70A1660E,
  0x8A8DFAA3, 0x1BE79937, 0xF7476978, 0x513C1764,
  0x531AC6BF, 0x12C06908, 0x001CDB95, 0x1A4B6A53,
  0xD067FCE5, 0x12B2CFB6, 0x9DDB477F, 0x740E0066,
  0x39DDF25A, 0xCC8BFA2D, 0xF1B20EAF, 0x64F2632C,
  0x9783CDEE, 0x63BFD4D8, 0x0084CFE5, 0x75F4E9E2,
  0x19B48FD0, 0x6C48DDD8, 0x7A36AF93, 0x71865C4C,
  0x9CE0199D, 0x867027D7, 0x2CB7B77F, 0x84EF01DA,
  0x72F5972F, 0x040F7074, 0xDF9AFA29, 0xC921F94E,
  0x75C08A36, 0x18C1EF9A, 0xD649A428, 0xC5B71937,
  0x8A30738A, 0xD97CD348, 0x858129A6, 0x239E3B0A,
  0xBBB8ABC4, 0x80FAC4C2, 0xECFCF20B, 0xD9D711F9,
  0xE2A4EF71, 0xB5FE87C0, 0xBE8B06B2, 0xAAFEF5A7,
  0x9C15DB3B, 0x0AEB8165, 0x4389A84A, 0x253B1D7A,
  0x19047C79, 0x7CDC78A2, 0xD20ADF03, 0x56F55A71,
  0x3E730FA8, 0xFD8650D8, 0x959E234E, 0xB7546681,
  0xDAD1B22A, 0x142A6E85, 0x8EF4BCE6, 0x68235B9D,
  0x85A13F85, 0x74096AE7, 0xA949BEA2, 0x29322D0D,
  0xD5683858, 0x82846526, 0x403DAE08, 0x6DD1943A,
  0xE1279BFF, 0x9E7E4F04, 0x1C3A4524, 0x484525E4,
  0x81D4CC5F, 0xE24124C0, 0x037464C0, 0xBF1BD691,
  0x26CEB003, 0x275EAD3A, 0xC5BDE908, 0x26414FF3,
  0xA30519AD, 0xD7B43ABE, 0x2CE5D3D5, 0x88412761,
  0x97CA2070, 0xE5FBB9C7, 0x276DF0B4, 0x308F751F,
  0x37A97DF6, 0xC9CD808C, 0xFE4CB380, 0x3D469303,
  0xAEE19096, 0xC0D5D42A, 0x4E823AD3, 0xF5F9CC3B,
  0x4286619C, 0x9CA45E1C, 0x66C97340, 0x891AEC49,
  0x45BAE606, 0xC798F047, 0x52649D6C, 0xCE86FDFC,
  0x80C6E402, 0xD6EC2F2B, 0x27C82282, 0x1FE26CE0,
  0x92F57EA7, 0xDE462F4D, 0x07497CAE, 0x5A48755C,
  0x721502DD, 0x6CBE7935, 0x836D8003, 0x9EAD7F70,
  0x9AB3A42F, 0x4C8652D6, 0x32E39273, 0xE8FA3860,
  0x1DA4F25A, 0x0CD6EF81, 0x02503F7D, 0x8854A0A1,
  0x9A30C4E8, 0x88157153, 0x05EFE294, 0x57C4C925,
  0x2887D96F, 0xC1A71E3C, 0xE9F84163, 0x2D0985DE,
  0xD21E796C, 0x6FB5CE56, 0x02614ABF, 0xC3C7BE2C,
  0xB54FED6F, 0xA617A083, 0xC3142D8F, 0x6079E4CE,
  0xCEFFC147, 0x1D0CB81B, 0xDC153E5F, 0xE36EF5BB,
  0xD531161A, 0x165B1015, 0x7AA114ED, 0x3F7579B3,
  0xF7F395F1, 0xBC6172C7, 0xA86F875E, 0x0E6C51B3,
  0xCDFEC2AF, 0x73C0E762, 0x824C2009, 0xC5A87748,
  0x94D40125, 0x8ABA3FFB, 0xD32BE060, 0x8C17EFF0,
  0x21E2547E, 0x07CFFAD9, 0x05340E15, 0xF3310C92,
  0x9D8D1908, 0x86BA527F, 0xF943F672, 0xEF73FBF0,
  0x46D95CA5, 0xC54CD95B, 0x9D855E89, 0x4BB5AF29
};

int main(int _argc,const char *_argv[]){
  isaac_ctx   isaac;
  int         i;
  int         j;
  /*This is how many tests you plan to run.*/
  plan_tests(2);
  isaac_init(&isaac,NULL,0);
  for(j=0;j<ISAAC_SZ;j++)isaac_next_uint32(&isaac);
  for(i=0;i<2;i++){
    int nmatches;
    nmatches=0;
    for(j=0;j<ISAAC_SZ;j++){
      nmatches+=isaac_next_uint32(&isaac)==STATEVEC[(i+1)*ISAAC_SZ-j-1];
    }
    ok1(nmatches==ISAAC_SZ);
  }
  /*TODO: We should test the random float/double routines, but they are not
     guaranteed to return the same values on all platforms, because the number
     of bits in the mantissa may be different.
    Perhaps some simple statistical tests would suffice.*/
  return exit_status();
}