/** * Generate a random number in the buffer of length bits * * @param buffer to store the generated random number * @param length in bits of the random number to generate */ void crypto_generate_random(ByteArray buffer, int length) { #ifndef TEST Byte number[8]; buffer += ((length + 7) / 8); // Generate the random number in blocks of eight bytes (64 bits) while (length >= 64) { buffer -= 8; __push(buffer); __code(PRIM, PRIM_RANDOM); __code(STOREI, 8); length -= 64; } // Generate the remaining few bytes/bits if (length > 0) { buffer -= (length + 7) / 8; GetRandomNumber(number); number[0] &= 0xFF >> ((64 - length) % 8); memcpy(buffer, number, (length + 7) / 8); }
//! insert the address inline void push( T *pObj ) { if( size_ >= maxi_ ) grow( next_increase(maxi_) ); __push( pObj ); }
int __expr_sy() { int type; while (ptoken->type != TOKEN_INVALID) { DEBUG("get type: %d \n", ptoken->type); switch(ptoken->type) { case (TOKEN_INTEGER): memcpy(&sy_token_pool[sindex], ptoken, sizeof(struct __token__)); sindex++; break; case (TOKEN_PLUS): case (TOKEN_MINUS): case (TOKEN_MUL): case (TOKEN_DIV): DEBUG("\n"); type = __pop(); if (type == -1) { __push(ptoken->type); break; } if (prio(type) >= prio(ptoken->type)) { while (type >= ptoken->type) { sy_token_pool[sindex].type = type; type = __pop(); sindex++; } if (type != -1) { __push(type); } } else { __push(type); __push(ptoken->type); } break; case (TOKEN_LPAREN): __push(ptoken->type); break; case (TOKEN_RPAREN): type = __pop(); while (type != TOKEN_LPAREN) { sy_token_pool[sindex].type = type; sindex++; type = __pop(); } break; } ptoken = get_next_token(); } DEBUG("\n"); type = __pop(); while (type != -1) { sy_token_pool[sindex].type = type; type = __pop(); sindex++; } return 0; }