CBVersionChecksumBytes * CBNewVersionChecksumBytesFromBytes(uint8_t * bytes,uint32_t size,bool cacheString,void (*logError)(char *,...)) { CBVersionChecksumBytes * self = malloc(sizeof(*self)); if (NOT self) { logError("Cannot allocate %i bytes of memory in CBNewVersionChecksumBytesFromBytes\n",sizeof(*self)); return NULL; } CBGetObject(self)->free = CBFreeVersionChecksumBytes; if(CBInitVersionChecksumBytesFromBytes(self,bytes,size,cacheString,logError)) return self; free(self); return NULL; }
bool CBInitAddressFromRIPEMD160Hash(CBAddress * self,uint8_t networkCode,uint8_t * hash,bool cacheString,void (*logError)(char *,...)){ // Build address and then complete intitialisation with CBVersionChecksumBytes uint8_t * data = malloc(25); // 1 Network byte, 20 hash bytes, 4 checksum bytes. if (NOT data) { logError("Cannot allocate 25 bytes of memory in CBInitAddressFromRIPEMD160Hash\n"); return false; } // Set network byte data[0] = networkCode; // Move hash memmove(data+1, hash, 20); // Make checksum and move it into address uint8_t checksum[32]; uint8_t checksum2[32]; CBSha256(data,21,checksum); CBSha256(checksum,32,checksum2); memmove(data+21, checksum2, 4); // Initialise CBVersionChecksumBytes if (NOT CBInitVersionChecksumBytesFromBytes(CBGetVersionChecksumBytes(self), data, 25,cacheString, logError)) return false; return true; }
CBVersionChecksumBytes * CBNewVersionChecksumBytesFromBytes(uint8_t * bytes,uint32_t size,bool cacheString,CBEvents * events){ CBVersionChecksumBytes * self = malloc(sizeof(*self)); CBGetObject(self)->free = CBFreeVersionChecksumBytes; CBInitVersionChecksumBytesFromBytes(self,bytes,size,cacheString,events); return self; }